find , per cercare i file: generalità ed espressioni
Tra i vari comandi visti finora, ce ne sono alcuni che permettono all'utente di scendere ricorsivamente nell'albero delle directory
per fare qualche azione: gli esempi canonici sono ls -R e rm -R . Bene, find è il comando
ricorsivo. Ogni volta che pensate "Beh, devo fare questo e quest'altro su tutti questi tipi di file nella mia partizione",
dovreste pensare di usare find . In un certo senso il fatto che find trovi file è un effetto secondario:
il suo vero compito è valutare. La struttura di base del comando è la seguente:
find percorso [...] espressione [...]
Questo almeno vale per la versione GNU; altre versioni non permettono di specificare più di un percorso, ed inoltre è
molto raro che serva una cosa del genere. La spiegazione della sintassi del comando è piuttosto semplice: dite da dove volete
che cominci la ricerca (la parte percorso; con GNU si può omettere e per default verrà presa in considerazione
la directory corrente "."), e che tipo di ricerca volete fare (la parte espressione).
Il comportamento standard del comando è piuttosto complicato, quindi vale la pena notarlo. Supponiamo che nella vostra home
directory ci sia una directory butta , che contiene il file pippo . Digitate find . -name pippo
(che come potete indovinare ricerca un file di nome pippo ), e ottenete ...niente altro che il prompt. Il problema sta nel
fatto che find è per default silenzioso: rende 0 se la ricerca è stata completata (trovando qualcosa o meno)
o un valore non-zero se ci sono stati dei problemi. Questo non accade con la versione che trovate su Linux, ma è comunque utile
da ricordare.
La parte delle espressioni può essere divisa in quattro gruppi di parole chiave diversi: opzioni, test,
azioni ed operatori; ognuno di questi può restituire un valore vero o falso, insieme ad un effetto secondario.
Le differenze tra i gruppi vengono mostrate più avanti.
opzioni
influiscono sulle operazioni generali di find , piuttosto che sul processo di un singolo file. Un esempio è -follow ,
che dice a find di seguire i link simbolici invece di dire semplicemente l'inode. Restituisce sempre il valore vero.
test
sono veri e propri controlli (ad esempio, -empty controlla se il file è vuoto), e possono restituire i valori
vero o falso.
azioni
hanno anche un effetto secondario, il nome del file considerato. Possono restituire vero o falso anch'esse.
operatori
non restituiscono un valore (possono essere considerati veri per convenzione), e vengono usati per costruire espressioni compresse.
Un esempio è -or , che prende l'Or logico delle due sottoespressioni ai suoi lati. Notate che quando si mettono
due espressioni una dopo l'altra, è sottinteso -and .
Notate che find si basa sulla shell per leggere la linea di comando, ciò significa che le parole chiave devono
essere messe tra spazi, e soprattutto che molti caratteri devono essere trattati in modo da non essere corrotti dalla shell. Si può
fare sia con la barra rovesciata che con le virgolette, singole e doppie; negli esempi le parole chiave a carattere singolo verranno
quotate con la barra rovesciata, perché (almeno secondo me, ma sono io che scrivo queste note!) è il modo più semplice.
|