Guida avanzata a Solaris

Ricerca di un file (find)

Il comando find ricerca i file che soddisfano le condizioni specificate dall'utente a partire dalla directory indicata. Ad esempio, è possibile cercare i file il cui nome contenga una determinata stringa o che siano stati modificati in un arco di tempo stabilito.

A differenza di molti comandi, le opzioni di find sono formate da più caratteri, e il nome della directory di partenza deve precedere le opzioni sulla riga di comando:

$ find directory opzioni

dove directory è il nome della directory di partenza e opzioni sono le opzioni del comando find.

Ogni opzione definisce un criterio per la selezione del file. Il programma seleziona solo i file che soddisfano tutti i criteri specificati. Aumentando il numero delle opzioni si restringe perciò il campo dei file corrispondenti. L'opzione -print indica che il risultato della ricerca deve essere visualizzato sullo schermo. (Come verrà descritto più avanti, il comando find può essere usato anche per l'esecuzione di comandi; in questo caso può essere superfluo visualizzare i file selezionati.)

L'opzione -name nomefile ordina a find di selezionare i file che corrispondono al nomefile specificato. In questo caso nomefile rappresenta l'ultimo componente del percorso del file. Ad esempio, l'ultimo componente del percorso /usr/lib/calendario è calendario. Questa parte del percorso viene spesso definita nome base del file.

Ad esempio, per ricercare tutti i file della directory corrente e delle relative sottodirectory il cui nome termina in s, digitare quanto segue:

$ find . -name '*s' -print
./alias
./alias/files
./alias/files/gks
./src/gks
$

Qui di seguito sono descritte alcune delle opzioni più comuni:

-name nomefile

Seleziona i file il cui ultimo componente corrisponde a nomefile. Per indicare un modello di ricerca anziché il nome esatto del file, inserire nomefile fra virgolette singole.

-user id_utente

Seleziona i file di proprietà di id_utente. id_utente può essere un nome di login o il numero dell'ID utente.

-group gruppo

Seleziona i file di proprietà del gruppo.

-m time n

Seleziona i file che sono stati modificati negli ultimi n giorni.

-newer file_di_riferimento

Seleziona i file modificati più recentemente del file_di_riferimento.

È anche possibile specificare un ordine di precedenza, inserendo le opzioni tra parentesi precedute dal carattere di escape "\" (ad esempio, \(opzioni\) ). All'interno delle parentesi è possibile inserire tra le opzioni il flag -o, per indicare a find di selezionare i file che corrispondono a ogni singolo criterio specificato anziché solo i file che soddisfano entrambi i criteri:

$ find . \( -name AAA -o -name BBB \) -print
./AAA
./BBB

Si può anche invertire il senso di un'opzione facendola precedere da un punto esclamativo (a sua volta preceduto da un carattere di escape). In questo modo find seleziona i file che non corrispondono all'opzione specificata:

$ find . \!-name BBB -print
./AAA

È inoltre possibile utilizzare find per eseguire sui file selezionati una determinata operazione, usando l'opzione

-exec comando '{}' \;

Questa opzione termina con un punto e virgola preceduto dal carattere di escape (\;). Le parentesi graffe fra virgolette vengono sostituite dai nomi dei file selezionati da find.

Ad esempio, si può usare find per cancellare automaticamente i file temporanei. Se si utilizza un criterio coerente per denominare i file temporanei, si potrà usare find per cercarli e cancellarli ovunque si trovino. Ad esempio, se i file temporanei vengono chiamati prova o esempio, il comando seguente permetterà di ricercarli e cancellarli automaticamente:

$ find . \( -name prova -o -name esempio \) -exec rm '{}' \;

Per maggiori informazioni su find(1), vedere man Pages(1): User Commands.