4.2 KiB
find
Il comando find permette di cercare files e non solo da riga di comando.
Se il percorso del file non è specificato, viene ricercato nella directory corrente e nelle sue sottodirectory.
Questa la sua struttura generale:
find path pattern
Ricercare un file per nome
find -iname abc.txt
In questo modo, viene cercato il file abc.txt (-i sta per insensitive) nella cartella corrente.
Specificare il tipo del pattern
find /etc -type f -name "*.conf"
dove il tipo del file può essere:
-type | Descrizione |
---|---|
f | File |
d | Directory |
l | Link |
Ricercare in più cartelle
find ~/Desktop/example1/ ~/Desktop/example2/ -name 'abc*.*'
size
Ricercare solo file più grandi di...
find -size +2000M
Esclusione di alcuni file dalla ricerca
Il comando find può anche escludere alcuni tipi di file dal risultato della ricerca:
find -name '*abc*' -type f \( ! -name '*.msi' \)
Nell'esempio, vengono esclusi tutti i file *abc*.msi
exec
È possibile eseguire comandi sui risultati di find.
La sintassi di base per eseguire la ricerca con exec è la seguente:
find [path] [arguments] -exec [command] {} \;
- [comand] il comando da eseguire;
- {} è un segnaposto per i risultati dati dal comando find;
- ; che per ogni risultato trovato, il [comand] viene eseguito, ossia, come se fossero passati in questo modo:
ls file1.txt
ls file2.txt
ls file3.txt
Alcuni esempi
Rinominare i file
> sudo find . -type f -name file\* -exec ls -l {} \;
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file2.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file7.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file4.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file8.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file10.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file1.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file9.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file5.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file3.txt
-rw-r--r-- 1 davide davide 0 9 apr 15.50 ./file6.txt
> sudo find . -type f -name file\* -exec mv {} {}_renamed \;
> ll
Permissions Size User Date Modified Name
.rw-r--r-- 0 davide 9 apr 15:50 file1.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file2.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file3.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file4.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file5.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file6.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file7.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file8.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file9.txt_renamed
.rw-r--r-- 0 davide 9 apr 15:50 file10.txt_renamed
Eliminare i file più grandi di...
find ~/Desktop -size +100M -exec rm {} \;
Modificare proprietario dei file:
> sudo find . -type f -name file\* -exec chown root:root {} \;
> ll
Permissions Size User Date Modified Name
.rw-r--r-- 0 root 9 apr 15:50 file1.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file2.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file3.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file4.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file5.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file6.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file7.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file8.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file9.txt_renamed
.rw-r--r-- 0 root 9 apr 15:50 file10.txt_renamed
Eliminare tutti i file corrispondenti ad un pattern di ricerca:
> sudo find . -type f -name file\* -exec rm -rf {} \;
> ll