next up previous contents index
Next: Azioni Up: find, per cercare i Previous: Opzioni

Test

I primi due test sono molto semplici da capire: -false restituisce solo il valore falso, mentre -true restituisce solo il valore vero. Altri test che non hanno bisogno della specifica di un valore sono -empty, che restituisce il valore vero se il file è vuoto, e la coppia -nouser / -nogroup, che restituiscono il valore vero se nessuna voce di /etc/passwd o /etc/group corrisponde all'id di utente/gruppo del proprietario del file; è una cosa comune che accade nei sistemi multiutente: viene cancellato un utente, ma nei posti più strani del filesystem restano suoi file, e per la legge di Murphy occupano un sacco di posto.

Naturalmente, è possibile ricercare un utente o un gruppo specifico. I test sono -uid nn e -gid nn. Sfortunatamente non è possibile dare direttamente il nome dell'utente, ma bisogna usare l'id numerico, nn.

È possibile usare le forme +nn, che sta per ``un valore strettamente maggiore di nn'' e -nn, che sta per ``un valore strettamente minore di nn''; è piuttosto stupido nel caso degli UID, ma sarà comodo con altri test.

Un'altra opzione utile è -type c, che restituisce il valore vero se il file è di tipo c. Le corrispondenze mnemoniche per le scelte possibile sono le stesse che in ls; quindi si ha b per i file block special, c per quelli character special, d per le directory, p per le pipe con nome, l per i link simbolici, e s per le socket. I file regolari sono indicati con una f. Un test correlato è -xtype, che è simile a -type tranne nel caso dei link simbolici. Se non è stato dato -follow, il file a cui si punta viene controllato al posto del link stesso. Completamente scorrelato è il test -fstype tipo; in questo caso viene controllato il filesystem. Credo di aver preso questa informazione dal file /etc/mtab, quello che indica i filesystem che vengono montati; sono sicuro che i tipi nfs, tmp, msdos ed ext2 vengono riconosciuti.

I test -inum nn e -links nn controllano se il file ha numero di inode nn o nn link, mentre -size nn rende vero se il file ha allocato nn blocchi da 512 byte (beh, non precisamente: per i file sparsi i blocchi non allocati vengono contati lo stesso). Dato che al giorno d'oggi i risultati di ls -s non vengono sempre misurati in parti da 512 byte (Linux per esempio usa unità di 1K), è possibile appendere a nn il carattere bper contare in byte, o k per contare in kilobyte.

I bit di permesso vengono controllati con il test -perm modalità. Se modalità non ha segno, i bit di permesso dei file devono combaciare perfettamente. Un - che precede i bit significa che tutti i bit di permesso devono essere impostati, ma non fa assunzioni sugli altri; un + è soddisfatto se uno qualsiasi dei bit è impostato. Ops! Mi dimenticavo di dire che la modalità è scritta in ottale o simbolicamente, come si fa in chmod.

Il prossimo gruppo di test è correlato all'ora di ultimo utilizzo del file; è comodo quando un utente ha riempito il suo spazio, e come al solito ci sono moltissimi file inutilizzati da anni, e di cui si è dimenticato il significato. Il problema è trovarli, e find è l'unica speranza. -atime nn rende vero se il file è stato utilizzato nn giorni fa - ad esempio, con un comando chmod - e -mtime nn se il file è stato modificato per l'ultima volta nn giorni fa. Talvolta si ha bisogno di un tempo più preciso; il test newer file è soddisfatto se il file considerato è stato modificato dopo file. Quindi, dovete semplicemente usare touch con la data desiderata, ed avete fatto. Il find della GNU aggiunge i test -anewer e -cnewer che si comportano in maniera simile, ed i test -amin, -cmin e -mmin, che contano il tempo in minuti invece che in periodi di 24 ore.

Per ultimo, il test che uso più spesso: -name pattern rende vero se il nome del file corrisponde esattamente a pattern, che è più o meno quello che si usa in un ls standard. Perché `più o meno'? Perché naturalmente dovete ricordare che tutti i parametri sono processati dalla shell, e quei bei metacaratteri vengono espansi. Quindi, un test come -name foo* non renderà quello che volete, e dovreste scrivere o -name foo o -name "foo*". Questo è probabilmente uno degli errori più comuni fatti dagli utenti disattenti, quindi scrivetelo a lettere GRANDI sul vostro schermo. Un altro problema è che, come con ls, i punti all'inizio non vengono riconosciuti; per questo potete usare il test -path pattern, che non si preoccupa dei punti e delle barre quando paragona il percorso del file considerato con pattern.


next up previous contents index
Next: Azioni Up: find, per cercare i Previous: Opzioni
Eugenia Franzoni
1998-09-29