Eseguire comandi con find

Una delle caratteristiche interessanti di find è che permette di specificare cosa fare con i file che vengono trovati. Ad esempio, è possibile chiedere di cancellarli con il flag -delete (da usare con parsimonia e con la dovuta attenzione).

Una caratteristica molto potente è il flag -exec, che permette di eseguire un comando qualunque sui file che corrispondono alla ricerca scelta. Ad esempio, supponiamo di voler eliminare i file modificati da più di 10 giorni. Potremmo usare il flag -delete in questo modo (non eseguire quest due comandi, a meno che non si vogliano davvero eliminare i propri file! È solo un esempio):

$ find . -mtime +10 -delete
oppure in maniera completamente equivalente combinare il flag -exec con il comando rm. Ad esempio:
$ find . -mtime +10 -exec rm {} \;
Il simbolo {} è un "segnaposto" per il percorso del file determinato da find, mentre \; sta ad indicare la fine del comando. Il simbolo che viene letto da find è semplicemente un punto e virgola, ma è necessario farlo precedere dal backslash perché la shell non lo interpreti.

Si utilizzi il comando find per creare una lista files-matricola.txt di tutti i file sul sistema dentro la cartella /usr in cui l'inode contenga come sottostringa il proprio numero di matricola; si escludano le cartelle, e si considerino solo i file regolari. Nel caso (relativamente probabile) in cui questa lista fosse vuota, si considerino i file in cui l'inode contiene le prima $k$ cifre del proprio numero di matricola, con $k$ il minimo intero $< 6$ per cui la lista non è vuota. Alcuni suggermienti: Questo comando dovrà eseguire un sottocomando ls per ogni file sul sistema, e questo non è molto efficiente (lo noterete dai tempi di esecuzione!). Se i tempi dovessero essere troppo lunghi, restringere la ricerca ad una cartella più piccola, come /usr/bin.
In alternativa è possibile, almeno accontentandosi di includere le directory, evitare del tutto find e utilizzare un ls ricorsivo. Provare a guardare il manuale di ls per capire come fare, e confrontare i tempi di esecuzione.