Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Qualunque cosa tu possa fare, o sognare di fare, incominciala. L'audacia ha in se' genio, potere e magia. Incomincia adesso.

Johann Wolfgang Goethe 

Sondaggio:

A tuo giudizio, riaprire le "casechiuse" è...

Un modo per combattere la criminalità
Un insulto alle donne
Una cosa da fare al più presto
L'ennesima stupidaggine di questo governo
Una cosa che non mi interessa

visualizza risultati


 

Metacaratteri

Nel capitolo precedente avete imparato alcuni comandi di manutenzione dei file: cp, mv e rm. Può capitare che vogliate interagire con più di un file alla volta. Per esempio, potreste voler copiare tutti i file che cominciano con data nella directory ~/backup: si può fare sia dando più comandi cp, sia elencando tutti i file in un'unica linea di comando; entrambi questi metodi, comunque, portano via molto tempo e avete molte possibilità di compiere errori. Una via migliore per farlo è scrivere:

/home/larry/report$ ls -F
1993-1 1994-1 data1 data5
1993-2 data-new data2
/home/larry/report$ mkdir ~/backup
/home/larry/report$ cp data* ~/backup
/home/larry/report$ ls -F ~/backup
data-new data1 data2 data5
/home/larry/report$

Come potete vedere, l'asterisco dice a cp di prendere tutti i file che iniziano con data e copiarli in ~/backup. Riuscite ad indovinare cosa farebbe cp d*w ~/backup? Ma cosa succede realmente ? Buona domanda. In realtà ci sono due caratteri speciali che vengono intercettati dalla shell bash . Il carattere "*", un asterisco, dice "sostituisci questa parola con tutti i file che verificano questa specifica". In questo modo, il comando cp data* ~/backup, come nell'esempio precedente, viene cambiato in cp data-new data1 data2 data5 ~/backup prima di venire eseguito.

Per vedere come funziona introduciamo un nuovo comando, echo. echo è un comando estremamente semplice; rimanda sullo schermo o stampa ogni parametro. Cioè:

/home/larry$ echo Ciao!
Ciao!
/home/larry$ echo Come va?
Come va?
/home/larry$ cd report
/home/larry/report$ ls -F
1993-1 1994-1 data1 data5
1993-2 data-new data2
/home/larry/report$ echo 199*
1993-1 1993-2 1994-1
/home/larry/report$ echo *4*
1994-1
/home/larry/report$ echo *2*
1993-2 data2
/home/larry/report$

Come potete vedere, la shell espande il metacarattere e passa tutti i file al programma che volete sia eseguito. Questo solleva una domanda interessante: cosa succede se non ci sono file che incontrano le specifiche del metacarattere? Provate echo /rc/fr*og e guardate cosa succede... bash passa testualmente la stringa con il metacarattere al programma. Bisogna dire anche che altre shell, come tcsh , invece di passare testualmente il metacarattere, rispondono No match. Ecco lo stesso comando sotto tcsh:

mousehouse>echo /rc/fr*og
echo: No match.
mousehouse>

L'ultima cosa che chiederete è come fare se volete che sullo schermo compaia data*, al posto della lista dei nomi dei file? Beh, sia sotto bash che tcsh, basta racchiudere la stringa tra virgolette:

/home/larry/report$ echo "data*"
data*
/home/larry/report$

oppure

mousehouse>echo "data*"
data*
mousehouse>

Oltre all'asterisco, anche il punto interrogativo viene interpretato dalla shell come carattere speciale. Un punto interrogativo corrisponde ad uno ed un solo carattere. Per esempio, ls /etc/?? mostra tutti i nomi di file di due lettere nella directory /etc.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2009 Cataldo Sasso