Listare contenuto di una directory escludendo certi tipi di file

Può capitare di dover listare il contenuto di una directory ma di voler escludere, dalla visualizzazione, tutti i file con estensione *.xyz. Ci sono diversi modi per fare questo e ne vedremo solo alcuni.

1) Utilizzando il comando “ls”

Tramite il comando ls possiamo listare il contenuto escludendo quello che non ci interessa. Per far ciò per prima cosa dovremmo abilitare l’opzione extglob che permette di utilizzare la tecnica del pattern matching (vedi man bash ).

Dentro una directory ho i seguenti file

-rw-r--r-- 1 lightuono lightuono    128058 feb 12 21:25 files.zip
-rw-r--r-- 1 lightuono lightuono   1274420 feb 11 22:20 pac-4.5.0.3-all.deb
-rw-r--r-- 1 lightuono lightuono   1178381 feb 11 22:45 pac.zip
-rw-r--r-- 1 lightuono lightuono    521615 feb 12 19:43 server.log

Ora voglio escludere dalla visualizzazione tutti i file con estensione *.zip. Con il comando ls devo fare così:

$ shopt -s extglob
$ ls !(*.zip) -ld

-rw-r--r-- 1 lightuono lightuono   1274420 feb 11 22:20 pac-4.5.0.3-all.deb
-rw-r--r-- 1 lightuono lightuono    521615 feb 12 19:43 server.log

Ho messo l’opzione -d per evitare di guardare il contenuto di ogni directory e di seguire eventuali collegamenti simbolici. Togliendo l’opzione -d, ad ogni directory che incontrerà ci mostrerà il suo contenuto.

2) Utilizzando il comando “grep”

Anche con il comando grep possiamo listare solo quello che ci interessa escludendo quello che non vogliamo. Basandoci sempre sull’esclusione dei file *.zip, possiamo utilizzare la seguente formula:

$ ls -ls | grep -v "\.zip$"

rw-r--r-- 1 lightuono lightuono   1274420 feb 11 22:20 pac-4.5.0.3-all.deb
-rw-r--r-- 1 lightuono lightuono    521615 feb 12 19:43 server.log

3) Utilizzando il comando “find”

Anche con il comando find possiamo listare escludendo quello che vogliamo. Escludiamo di nuovo tutti i file *.zip con la seguente formula:

$ find . -maxdepth 1 -type f \( ! -iname "*.zip" ! -iname "." \)

./pac-4.5.0.3-all.deb
./server.log

Certo come visualizzazione non è il massimo, ma possiamo migliorare:

$ find . -maxdepth 1 -type f \( ! -iname "*.zip" ! -iname "." \) -exec ls -l {} \;

-rw-r--r-- 1 lightuono lightuono 1274420 feb 11 22:20 ./pac-4.5.0.3-all.deb
-rw-r--r-- 1 lightuono lightuono 521615 feb 12 19:43 ./server.log

Ecco qui elecanti tre metodi per poter escludere dei file da una lista. Sicuramente più leggibili il primo e secondo metodo ;)

Dev Null

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>