mywiki/linux/find.md

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

Collegamenti