È possibile usare il comando find per cercare attraverso una directory e le sue
sottodirectory i file che soddisfano determinati criteri. Poi, è possibile
eseguire un comando sui file trovati.
Reperimento
di file che si abbinano ad un pattern |
 |
Sebbene la sintassi di find possa essere complessa, può essere di
aiuto nell’usare HP-UX in modo più produttivo.
Si tratta di un comando potente e flessibile. Tuttavia, può eseguire
molto lentamente, specialmente se sta eseguendo la ricerca in molte
directory.
Supponiamo che si desideri visualizzare tutti i file della
directory attuale e delle sue sottodirectory che iniziano con d.
Inserire:
find(1)
Il punto (.) fa in modo che find esegua la ricerca nella directory attuale e nelle
sue sottoirectory. L’opzione -name seguita da un nome file o da un pattern di nome
file (in questo caso d*) dice a find di cercare tutti i nomi file che coincidono con
quel pattern. In questo esempio, find cercherà tutti i nomi di file che iniziano
con d.
Da notare che d* è racchiuso da virgolette semplici 'd*'. Se si usa un pattern di nome file nel comando find, occorre inserirlo tra virgolette in modo che
la shell lo interpreterà in modo corretto.
Reperimento
di file più recenti di un determinato file |
 |
Supponiamo che si desideri visualizzare tutti i file modificati
dopo un determinato file. Per visualizzare tutti i file più recenti
di myfile nella directory /home/leslie e nelle sue sottodirectory, inserire:
$ find /home/leslie -newer myfile |
Questo esempio può essere letto come segue: nella
directory /home/leslie e nelle sue sottodirectory, trovare tutti i file
modificati dopo myfile. (per stabilire quando un file sia stato modificato
l’ultima volta, usare il comando ll).
Esecuzione
di comandi sui file |
 |
È possibile eseguire i comandi sui file localizzati
con il comando find. Supponiamo che si desideri rimuovere tutti i
file con estensione .tmp nella directory attuale e nelle sue sottodirectory.
Inserire:
$ find . -name '*.tmp' -exec rm {} \; |
Questo esempio trova e visualizza sullo schermo tutti i file
della directory attuale e delle sue sottodirectory che terminano
in .tmp, poi cancella tali file. L’opzione -exec provoca l’esecuzione del seguente comando
(rm). Le parentesi { } rappresentano i file trovati
con il comando find. Il punto e virgola che termina la stringa exec viene ignorato con una barra inversa (\;).
Uso
degli operatori logici |
 |
La sintassi di find include gli operatori booleani logici NON, E,
ed O.
Per trovare i file che non coincidono con un pattern specifico,
usare l’operatore logico NON, il punto esclamativo (!). Dopo aver usato questo operatore, occorre usare
le opzioni per definire gli attributi del file come il nome file.
Poi, si trovano i file che non hanno gli attributi
specificati.
Ad esempio, per trovare tutti i file in /tmp che non appartengono a leslie, usare questo comando:
$ find /tmp \( ! -user leslie \) |
La \ ignora le parentesi in modo che la shell non le
interpreti come caratteri speciali.
Per trovare i file che hanno due attributi distinti, usare
l’operatore logico E, espressione -a espressione. Ad esempio, per trovare tutte le directory in / appartenenti a leslie, usate questo comando:
$ find / \( -type d -a -user leslie \) |
Per trovare i file che hanno entrambi i due attributi, usare
l’operatore logico O, espressione -o espressione. Ad esempio, per rimuovere tutti i file che terminano
con .o o sono denominati a.out ai quali non si è fatto accesso per una
settimana, usare questo comando:
$find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \; |
Per
ulteriori informazioni...
Consultare la manpage find(1) per ulteriori
informazioni sull’uso del comando find.