Oct 232010
 

zshIn un precedente articolo abbiamo visto come installare e configurare zsh, oggi vedremo in dettaglio le opzioni offerte da zsh per il globbing, ovvero il completamento automatico da shell dei comandi realizzato con alcuni caratteri particolari.

Si prega di notare: la maggior parte dei comandi che vedrete qui potrebbero essere realizzati con una opzione particolare del comando stesso, per esempio con ls -r si può fare una ricerca ricorsiva, ma l’obiettivo di questo articolo è quello di utilizzare solo la shell, quindi il nostro obiettivo sarà quello di ottenere lo stesso risultato, ma solo con la potenza del globbing zsh.



Compito 1 mostrare tutti i file con estensione .pdf nella directory corrente


ls *.pdf

Comando comune per vedere tutti i file con una certa estensione.

Esempio di output:

┌┌(zsh-laptop)┌(103/pts/8)┌(08:39pm:10/23/10)┌-
└┌(%:~)┌- ls *.pdf

file1.pdf
fil2.pdf

Compito 2 mostrare tutti i file con estensione .pdf nella directory corrente e sottodirectory


ls **/*.pdf

Questo è un altro comando molto comune, con il doppio ** prima dello / diciamo a zsh di espandere il comando alla directory corrente ed a tutte le sottodirectory.

Example of output

┌┌(zsh-laptop)┌(103/pts/8)┌(08:39pm:10/23/10)┌-
└┌(%:~)┌- ls *.pdf
file1.pdf
fil2.pdf
dir1/file3.pdf
dir1/dir2/file4.pdf
dir3/file5.pdf

Usare le qualificazioni.

Le qualificazioni dei Glob sono un’altra bella aggiunta di Zsh: si ha la capacità di selezionare i tipi di file utilizzando alcuni flag in parentesi alla fine del pattern globbing.
Si può utilizzare (.) per indicare solo i file regolari, (/) per le directories, (*) per i file eseguibili, (@) per i link simbolici, (=) per i sockets, (p) per le named pipes, (%) per i device files, (%b) per i block files e (%c) per i files di tipo carattere.

Compito 3 mostrare tutti i file regolari che contengono nel nome la parola “test” nella directory corrente e sottodirectory


ls **/*test*(.)

L’aggiunta finale dei caratteri (.) indica alla shell di selezionare solo i file di tipo regolare

Esempio di output:

┌┌(zsh-laptop)┌(103/pts/8)┌(08:39pm:10/23/10)┌-
└┌(%:~)┌- ls **/*test*(.)
testata
test
dir1/testone
die2/testina

Compito 4 trovare tutti i file eseguibili nella directory corrente e sotto directory.


ls -l **/*(.x)

Con l’aggiunta in fondo dei caratteri (.x) diciamo alla shell di selezionare solo i file che sono eseguibili dal proprietario.

Esempio di output:

┌┌(zsh-laptop)┌(103/pts/8)┌(08:39pm:10/23/10)┌-
└┌(%:/bin)┌- ls -l **/*(.x)
-rwxr-xr-x 1 root root 801808 2010-08-10 21:58 bash
-rwxr-xr-x 3 root root 26064 2010-09-11 15:48 bunzip2
-rwxr-xr-x 1 root root 1322856 2010-10-04 18:04 busybox
-rwxr-xr-x 3 root root 26064 2010-09-11 15:48 bzcat
-rwxr-xr-x 1 root root 2140 2010-09-11 15:48 bzdiff
.....

Compito 5 trovare tutti i file che non hanno abilitata la scrittura per il gruppo nella directory corrente e tutte le subdirectory


ls **/*(.:g-w:)

In questo esempio abbiamo usato i permessi nello “stile chmod” per fare questo aggiungere : all’inizio ed alla fine della condizione che volete testare, nel nostro esempio diventa quindi :g-w:

User and Group

Un altro utile test di qualificazione glob e quello per l’utente o il gruppo che possiede un file. Per eseguire il test per il proprio utente o gruppo, basta usare (U) o (G), rispettivamente. Per gli altri utenti, si deve aggiungere l’ID utente o il gruppo di (u) o (g).

Compito 6 trovare tutti i files che hanno il tuo gruppo primario


ls -l **/*(.G)

In questo esempio l’uso del flag G ci permette di selezionare tutti i file che hanno il nostro gruppo primario.

Compito 7 trovare tutti i files dell’utente tomcat


ls -l **/*(u:tomcat:)

Normalmente con il flag u bisogna mettere lo userid, ma se volete invece utilizzare l’username allora dovete usare la sintassi :username:

Data di accesso e modifica

Zsh può anche scegliere i file in base alla data di modifica o di accesso (m) o (a), rispettivamente. È possibile cercare l’ora esatta, periodi precedenti (-) o dopo (+) il punto prescelto. Questo è dato in giorni di default, ma può anche essere misurata in mesi, (M), settimane, (w), ore (h), minuti (m) o secondi, (s).

Compito 8 trovare tutti i files acceduti nell’ultimo mese


ls **/*(.aM-1)

con questo comando sarà stampata la lista di tutti i file acceduti da meno di 1 mese, ovvero (.aM-1)

File size
Ci sono anche glob qualificativi per la dimensione dei file, e funzionano alla stessa maniera: (L) indica che si guarda la dimensione dei file, che è misurata di defualt in bytes, ma può anche essere misurata in kilobytes (k), megabytes (m), o blocchi da 512‑byte (p).

Compito 9 trovare tutti i files più grandi di 10 megabytes


ls **/*(.Lm+10)

Con questo comando la shell selezionerà solo i files di dimensione maggiore ai 10 megabytes.

Queste qualificazioni di glob possono anche essere combinati a piacere. I risultati possono essere lunghi, ma se conoscete le qualificazioni di base si può dare un senso anche a lunghi comandi. Si può usare ^ prima di una sequenza di qualificazione per negare, or , per indicare un or logico. Guardate la pagina del man per maggior informazioni sulle qualificazioni glob, compreso il modo per ordinare l’output in modi diversi.

Compito finale: trovare tutti i file di root (u0), scrivibili da tutti (W), di dimensione maggiore ai 10K (Lk+10) e modificati durante l’ultima ora (m0)


ls **/*(u0WLk+10m0)

Popular Posts:

Flattr this!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*