11.07.2015 Views

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

78 CAPITOLO 2. LA SHELL E I COMANDIcerta azione. Se non si specifica nulla l’azione di default è quella di stampare il nome del file,equivalente alla opzione -print; ma si possono anche scrivere i nomi su un file qualunque usandol’opzione -fprint file, o usare vari formati.Opzione-exec-print-print0-fprint file-okSignificatoesegue un comando usando come argomento il nome delfile.stampa il nome del file terminato con un a capo.stampa il nome del file terminato con un carattere NUL(il valore 0).scrive il nome del file sul file file.come -exec ma chiede conferma del comando.Tabella 2.9: Principali opzioni di find per specificare azioni.L’elenco delle opzioni principali è riportato in tab. 2.9, ma quella di gran lunga più importanteè -exec che permette di eseguire, per ogni file corrispondente alla selezione, un comando. Lasintassi dell’opzione è complessa in quanto si deve inserire una riga di comando all’interno diun’altra, e ci sono delle convenzioni usate dal comando per passare i valori. Quando si usa -exectutto quello che segue viene interpretato come una riga di comando fino a che non si incontraun carattere “;”, in detta riga si può fare riferimento al file che corrisponde con la stringa {}.Il problema è che tutti questi caratteri vengono interpretati dalla shell, e devono quindi essereadeguatamente protetti; allora se ad esempio si vogliono spostare tutti i file non acceduti da piùdi 15 giorni un una directory old, si potrà usare un comando del tipo:piccardi@anarres:~/Truelite/$ find . -atime +15 -exec mv \{\} old \;La potenza del comando find è poi ulteriormente aumentata dal fatto che le varie opzioniprecedenti possono essere combinate fra di loro con degli operatori logici. Ma se il significato di-and o -or può sembrare immediato nel caso di criteri di ricerca, diventa meno chiaro quandosi ha a che fare con delle azioni. In realtà infatti il comando associa un valore logico ad ogniopzione, e quando si esegue una selezione il valore è automaticamente vero, lo stesso vale pertutte le azioni, tranne -exec (e derivate come -ok) in cui il valore è vero se il comando ha unostato di uscita nullo, e falso altrimenti.Il funzionamento di un operatore come -and (che è sottinteso se si specificano più opzioni)è che la seconda opzione (sia questa di ricerca, che una azione) viene eseguita solo se la prima èvera. Viceversa con -or la seconda opzione viene eseguita solo se la prima è falsa. Infine -notnega il risultato di una opzione.Nel caso si combinino opzioni di ricerca tutto questo è del tutto ininfluente riguardo ilrisultato del comando, che è quello che ci si aspetta intuitivamente (entrambe le condizioni diricerca devono essere soddisfatte per -and o solo una per -or, o si inverte la selezione con -not),ma cambia profondamente quando ci sono di mezzo delle azioni come -exec, perché in tal casol’esecuzione della seconda opzione dipende in maniera essenziale dal risultato della prima (se sichiede di eseguire due comandi ad esempio le cose dipendono dal risultato di quello che si esegueper primo).Per questo ad esempio specificare con -and più comandi (o semplicemente scriverne più diuno, dato che in tal caso il -and è sottinteso) non significa affatto che essi saranno eseguiti tutti:lo saranno solo se tutti hanno successo, se uno non ha successo i successivi non saranno eseguiti.Qualora si voglia essere sicuri di eseguire tutti i comandi in una lista si può usare l’operatore“,” nel qual caso saranno eseguiti comunque tutti, ma si avrà un valore finale corrispondenteall’ultimo della lista.Abbiamo allora visto come find ci permette di trovare un file in base al nome e alle suecaratteristiche generiche, una ulteriore modalità di ricerca è quella che permette di effettuare

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!