# 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: ```bash find path pattern ``` ## Ricercare un file per nome ```bash 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 ```bash 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 ```bash find ~/Desktop/example1/ ~/Desktop/example2/ -name 'abc*.*' ``` ## size Ricercare solo file più grandi di... ```bash find -size +2000M ``` ## Esclusione di alcuni file dalla ricerca Il comando find può anche escludere alcuni tipi di file dal risultato della ricerca: ```bash 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: ```bash 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: ```bash ls file1.txt ls file2.txt ls file3.txt ``` ### Alcuni esempi Rinominare i file ```bash > 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... ```bash find ~/Desktop -size +100M -exec rm {} \; ``` Modificare proprietario dei file: ```bash > 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: ```bash > sudo find . -type f -name file\* -exec rm -rf {} \; > ll ``` ## Collegamenti - [https://linuxhandbook.com/find-files-by-name/](https://linuxhandbook.com/find-files-by-name/) - [https://linuxhandbook.com/find-exec-command/](https://linuxhandbook.com/find-exec-command/) - [https://www.ionos.it/digitalguide/server/configurazione/comando-find-di-linux/](https://www.ionos.it/digitalguide/server/configurazione/comando-find-di-linux/)