Aggiornato il: 30/11/2020 da Computer Hope

Nei sistemi operativi Linux, il comando find può essere utilizzato per cercare file e directory sul computer. Per procedere, selezionare un collegamento dal seguente elenco o passare attraverso ogni sezione in ordine.

Nota

Per utilizzare find, iniziare aprendo una sessione terminale per accedere alla riga di comando.

Funzionalità di base di find

L’esecuzione di find senza opzioni produce un elenco di ogni file e directory all’interno e al di sotto della directory di lavoro., Ad esempio, se la tua directory di lavoro è /home/hope/Documents, l’esecuzione di find produce quanto segue:

  • Ogni file in /home/hope/Documents.
  • Ogni sottodirectory in / home / hope / Documents.
  • Ogni file in ciascuna di queste sottodirectory.

Vediamo in azione., Prima di tutto, controllare la nostra directory di lavoro utilizzando il comando pwd:

pwd
/home/hope/Documents

Ora vediamo di trovare senza opzioni:

find

In questo esempio, vediamo un totale di dieci file e quattro cartelle e sotto la nostra cartella Documenti.

Si noti che l’output inizia con un singolo punto, che rappresenta la directory di lavoro., Eseguire find senza opzioni equivale a specificare che la ricerca dovrebbe iniziare nella directory di lavoro, in questo modo:

find .

L’esempio sopra è il modo “corretto” per usare find. Se si tenta di usarlo su un altro sistema operativo simile a Unix, come FreeBSD, è necessario specificare una directory. È buona pratica usare questa forma del comando.,

Specificare dove cercare

Per elencare solo i file e le sottodirectory che sono contenuti nella directory/home/hope/Documents/images, specificare il primo argomento del comando come:

find /home/hope/Documents/images

Si noti che il percorso completo è mostrato anche nei risultati.,

Se la nostra directory di lavoro è /home/speranza/Documenti, possiamo utilizzare il seguente comando, che trova il file:

find ./images

Ma questa volta, il risultato riflette la posizione di partenza della ricerca e simile a questa:

per impostazione predefinita, la ricerca cerca in ogni sottodirectory della posizione di partenza. Se si desidera limitare il numero di livelli di sottodirectory da cercare, è possibile utilizzare l’opzione-maxdepth con un numero.

Ad esempio, specificando-maxdepth 1 cerca solo nella directory in cui inizia la ricerca., Se vengono trovate delle sottodirectory, vengono elencate, ma non ricercate.,

find . -maxdepth 1
../images./bigfiles.txt./gimp-2.8.16.tar.bz2./hp-fanfic./archlinux-2016.02.01-dual.iso

Specificare -maxdepth 2 ricerche di directory e di una sottodirectory profonda:

find . -maxdepth 2

Specificare -maxdepth 3 la ricerca di un livello più profondo:

find . -maxdepth 3

Ricerca per nome

Per limitare i risultati della ricerca per abbinare solo i file e le directory che hanno un certo nome, utilizzare l’opzione di nome e mettere il nome tra virgolette:

find . -name "picard.jpg"
./images/memes/picard.jpg

È inoltre possibile utilizzare i caratteri jolly come parte del nome del file., Ad esempio, per trovare tutti i file il cui nome termina in .jpg, è possibile utilizzare un asterisco per rappresentare il resto del nome del file. Quando si esegue il comando, la shell globerà il nome del file in tutto ciò che corrisponde al modello:

find . -name "*.jpg"
./images/hp/snape.jpg./images/hp/harry.jpg./images/memes/winteriscoming.jpg./images/memes/picard.jpg

Si noti che il nostro comando non ha elencato il file la cui estensione (in questo caso, JPG) è in lettere maiuscole. Questo perché a differenza di altri sistemi operativi, come Microsoft Windows, i nomi dei file Linux sono case-sensitive.,”>

elencare solo le directory e omettere i nomi di file, specificare il tipo d:

find . -type d
../images./images/hp./images/memes./hp-fanfic

la Ricerca di file in base alle dimensioni

Per esempio, per trovare tutti i file che sono “più di 50 kilobyte”, usa -size +50k:

find . -size +50k
./images/memes/winteriscoming.jpg./gimp-2.8.16.tar.bz2./archlinux-2016.02.01-dual.iso

Per il file di “più grande di 10 megabyte”, usa -size +10M:

find . -size +10M
./gimp-2.8.16.tar.bz2./archlinux-2016.02.01-dual.iso

Per i “più grandi di 1 gb”, usa -size +1G:

find . -size +1G
./archlinux-2016.02.01-dual.iso

Per i file in un certo intervallo di grandezza, a due dimensioni., Ad esempio, per trovare file “più grandi di 10 megabyte, ma più piccoli di 1 gigabyte”, specificare -size +10M-size-1G:

find . -size +10M -size -1G
./gimp-2.8.16.tar.bz2

Trovare i file in base alla modifica, all’accesso o al cambiamento di stato

L’opzione-mtime limita la ricerca per quanti giorni da quando il contenuto del file è stato modificato. Per specificare i giorni passati, utilizzare un numero negativo., Ad esempio, per trovare solo i file che sono stati modificati negli ultimi due giorni (48 ore fa), usa-mtime -2:

find . -mtime -2

L’opzione-mmin fa la stessa cosa, ma in termini di minuti, non di giorni. Ad esempio, questo comando mostra solo i file modificati nell’ultima mezz’ora:

find . -mmin -30

Un’opzione simile è-ctime, che controlla quando lo stato di un file è stato modificato per l’ultima volta, misurato in giorni. Una modifica di stato è una modifica dei metadati del file. Ad esempio, la modifica delle autorizzazioni di un file è modifica dello stato.,

L’opzione-cmin cerca un cambiamento di stato, misurato in minuti.

È anche possibile cercare quando un file è stato l’ultimo accesso — in altre parole, quando il suo contenuto è stato visualizzato più di recente. L’opzione-atime viene utilizzata per cercare i file in base al tempo di accesso più recente, misurato in giorni.

L’opzione-amin esegue la stessa restrizione di ricerca, ma misurata in minuti.

Reindirizzamento dell’output a un file di testo

Se si esegue una ricerca molto ampia, è possibile salvare i risultati della ricerca in un file, in modo da poter visualizzare i risultati in seguito., Puoi farlo reindirizzando l’output di find in un file:

find . -iname "*.jpg" > images.txt

Puoi quindi aprire i risultati in un editor di testo o stamparli con il comando cat.

cat images.txt

in Alternativa, è possibile reindirizzare l’output del comando tee, che consente di stampare l’output sullo schermo e scrivere in un file:

find . -size +500M | tee bigfiles.txt
./archlinux-2016.02.01-dual.iso
cat bigfiles.txt
./archlinux-2016.02.01-dual.iso

Sopprimere i messaggi di errore

Si potrebbe essere visualizzato il messaggio di errore “Autorizzazione negata” quando si esegue una ricerca., Ad esempio, se cerchi la directory principale come utente normale:

find /

Riceverai quel messaggio di errore se find tenta di accedere a un file che il tuo account utente non ha il permesso di leggere. È possibile eseguire la ricerca come superutente (root), che ha accesso completo a tutti i file sul sistema. Ma non è consigliabile fare le cose come root, a meno che non ci siano altre opzioni.,

Se avete bisogno di fare è nascondere il “Permesso negato” i messaggi, è possibile aggiungere 2&>1 | grep -v “Permesso negato” alla fine del comando, come questo:

find / 2>&1 | grep -v "Permission denied"

L’esempio filtra il “Permesso negato” messaggi da una ricerca. Come?

2>& 1 è un reindirizzamento speciale che invia messaggi di errore allo standard output per convogliare le linee di output combinate al comando grep., grep-v esegue quindi una corrispondenza inversa su “Permission denied”, visualizzando solo le righe che non contengono quella stringa.

Reindirizzare e utilizzare grep per filtrare i messaggi di errore è una tecnica utile quando “Permission denied” sta ingombrando i risultati della ricerca e non è possibile eseguire la ricerca come root.

Esempi

find ~/. -name "*.txt" -amin -120

Trova tutti i file nella tua home directory e sotto i quali finiscono nell’estensione “.txt”. Visualizza solo i file a cui si accede nelle ultime due ore.,

find . -name "*.zip" -size +10M -mtime -3

Trova tutti i file nella directory di lavoro e sotto il cui nome ha l’estensione”.zip ” e la cui dimensione è maggiore di 10 megabyte. Visualizza solo i file il cui contenuto è stato modificato nelle ultime 72 ore.

find . -iname "*report*" -type f -maxdepth 2

Eseguire una ricerca senza distinzione tra maiuscole e minuscole per i file che contengono la parola “report” nel loro nome. Se la ricerca trova una directory con “report” nel suo nome, non visualizzarla. Cerca solo nella directory di lavoro e un livello di directory sotto di esso.,

find / -name "*init*" 2>&1 | grep -v "Permission denied" | tee ~/initfiles.txt

Trova tutti i file sul sistema il cui nome contiene “init”, sopprimendo i messaggi di errore. Visualizzare i risultati sullo schermo e li output in un file nella directory home denominata ” initfiles.txt”.