Keywords: guide

Next: Operatori Up: find, per cercare i Previous: Test

## Azioni

Ho detto che le azioni fanno, appunto, un'azione. Beh, -prune invece non fa qualcosa, cioè non discende all'interno dell'albero delle directory (a meno che non si dia -depth). Di solito si trova insieme a -fstype, per scegliere tra i vari filesystem da controllare.

Le altre azioni possono essere divise in due grandi categorie:

- Azioni che stampano qualcosa. La più banale - e certo, l'azione di default di `find` - è -print che stampa semplicemente il nome del/dei file che corrispondono alle altre condizioni nella linea di comando, e rende il valore vero. Una semplice variante di -print è -fprint file, che usa file invece dell'output standard, -ls elenca il file corrente nello stesso formato di `ls -dils`, -printf formato si comporta più o meno come la funzione del C printf(), in modo che potete specificare come formattare l'output, e -fprintf file formato fa la stessa cosa, ma scrivendo su file. Anche queste azioni rendono il valore vero.

- Azioni che eseguono qualcosa. La loro sintassi è un po' strana e sono largamente usate, quindi per favore dategli un'occhiata.

  -exec comando `\;` il comando è eseguito, e l'azione restituisce il valore vero se il suo stato finale è 0, cioè se l'esecuzione è regolare. La ragione per il ``\;`` è piuttosto logica: `find` non sa dove finisce il comando, e il trucco di mettere l'azione exec alla fine del comando non è applicabile. Beh, il modo migliore per segnalare la fine del comando è di usare il carattere che la shell stessa usa, cioè ``;`', ma naturalmente un punto e virgola da solo sarebbe mangiato dalla shell e non arriverebbe a `find`, quindi deve essere usato con un comando di escape. La seconda cosa da ricordare è come specificare il nome del fie corrente all'interno di comando, dato che probabilmente vi siete adoperati perché l'espressione faccia qualcosa, e non solo stampare `date`; si fa per mezzo della stringa `{}`. Alcune versioni vecchie di `find` richiedono che debba essere messa tra spazi bianchi - non molto comodo se ad esempio vi serve il percorso intero e non solo il nome del file - ma con il find della GNU può essere ovunque nella stringa che compone comando. E, chiederete di sicuro, non deve essere usato con un comando di escape o quotato? Meraviglioso: non l'ho mai dovuto fare né sotto tcsh né sotto bash (sh non considera `{` e `}` come caratteri speciali, quindi non è un problema). La mia idea è che la shell ``sa'' che `{}` non è un'opzione che ha senso, quindi non prova ad espanderla, fortunatamente per `find`, che la ottiene integra.

  -ok comando `\;` si comporta come -exec, con la differenza che per ogni file scelto viene chiesto all'utente di confermare il comando; se la risposta inizia per `y` o `Y` viene eseguito, altrimenti no, e l'azione restituisce il valore falso.

Next: Operatori Up: find, per cercare i Previous: Test