#howto - Utilizzo del comando find

Scritto da il
Redatto da

find è uno dei comandi più utili nel contesto della console.

Come è possibile intuire dal nome, find ha il compito di cercare file e cartelle, magari con la stessa estensione. In questa guida vedremo come utilizzarlo, imparando anche i diversi parametri.

Utilizzo del comando

In questo esempio andiamo a cercare tutti i file che terminano con estensione .txt nella cartella home di un utente a nostra scelta includendo anche le sottocartelle.

find /home/username/ -name "*.txt"

Nel caso, invece, volessimo specificare la nostra home è necessario sostituire il percorso con $HOME, la variabile d’ambiente che indica la cartella del utente corrente.

Se avessimo intenzione di cercare un file specifico nella nostra home utilizzeremo il parametro “-name”:

find $HOME -name "nomefile.estensione"

Sintassi

Per utilizzare find sono necessari tre parametri: le opzioni del programma, il path (o cartella) in cui vogliamo cercare il nostro file e l’espressione, che può essere ad esempio il nome del file. Vediamo il seguente esempio:

find -L /home/username/ -name "fattura.pdf"

Questa sintassi indica a find che deve cercare nella cartella home di un utente un file chiamato “fattura.pdf” e che i link simbolici, nel caso ci fossero, devono essere seguiti, questo perchè indicato da -L.

In questo caso:

find -P /home/username/ -name "fattura.pdf"

il programma esegue esattamente lo stesso procedimento spiegato in precedenza, ma a differenza di prima, vista la presenza del parametro -P, i link simbolici non verranno seguiti.

Con find è anche possibile cercare delle cartelle e non solamente dei file. Mettiamo caso di dover individuare nei nostri documenti una cartella dedicata ai recenti pagamenti. Per fare ciò, possiamo avvalerci del parametro -type d:

find . -type d -iname "pagamenti"

A differenza dei precedenti esempi abbiamo utilizzato iname al posto di name, ma questo per un semplice motivo. Con iname, infatti, find cercherà tutti i file (o cartelle) con il nome da noi specificato in maniera “non case-sensitive”, dunque ignorando la presenza o meno di una lettera maiuscola. Con name, infatti, sarà necessario inserire il nome esatto rispettando le lettere maiuscole e minuscole.

Ricollegandoci all’esempio appena fatto, nel caso volessimo cercare dei pagamenti salvati nel nostro dispositivo negli ultimi sette giorni, ad esempio, è possibile sfruttare il parametro -mtime:

find ./pagamenti/ -iname "*.pdf" -mtime -7

In questo modo il programma cercherà e ci mostrerà tutti i PDF dei pagamenti che abbiamo modificato o creato negli ultimi sette giorni.

Eliminare un file con find

Con find è anche possibile trovare e cancellare immediatamente un file grazie a -delete: nonostante possa risultare utile in determinati casi, come ad esempio nella ricerca di backup inutilizzati, è necessario ricordarsi di utilizzare questo parametro con la dovuta cautela per non cancellare più file del voluto. Vediamo un esempio:

find ./backup/ -iname "*.bak" -delete

Così facendo tutti i file che terminano con l’estensione .bak e che si trovano nella cartella backup saranno cancellati per sempre.

Trovare dei file in base al contenuto con grep

Un altro comando noto agli utenti di qualsiasi distribuzione Linux è grep, che, come sappiamo, ci permette di catturare il contenuto di un file. grep, però, è utilizzabile anche in combinazione con find. Ad esempio, supponiamo di aver bisogno di trovare un file che contiene al suo interno la parola “Linux” e di cui non ricordiamo il nome:

find . -type f -exec grep "Linux" '{}' \; -print

Questa sintassi all’inizio potrebbe sembrare molto complicata, ma è più facile da comprendere di quel che sembra. Con questo comando si andrà a cercare con grep, la cui esecuzione è specificata da -exec, nella stessa cartella in cui si trova l’utente (indicata da un punto) un file (specificato con -type f) che al suo interno contiene il termine “Linux”.

Le parentesi graffe, che sono un semplice rimpiazzo dei risultati di find, devono trovarsi all’interno di singole virgolette per evitare che grep generi male il nome del file. Il comando -exec viene terminato con il punto e virgola, carattere di cui si dovrebbe eseguire l’escape con ** per evitare che il terminale interpreti tutto ciò. Il risultato finale dovrebbe essere simile al seguente:

Linux

./prova

Per maggiori informazioni, non esitate a fare domande sul nostro gruppo Telegram.

history_edu Revisioni