Quest’oggi voglio rinfrescarvi la memoria su tre indispensabili alleati nell’utilizzo della bash di linux. In ordine (ma non per importanza) vi presento:
?
(punto interrogativo), *
(asterisco) e [ ] (parentesi quadre).
Supponiamo di avere una cartella in cui sono presenti i seguenti files:
ciao1.txt
ciao2.txt
ciao3.txt
ciao4.txt
ciao5.txt
ciao6.txt
ciao7.txt
ciao8.txt
ciao9.tzt
ciao10.txt
ciao11.txt
ciao12.txt
ciao13.txt
ciao11.ogg
Vediamo adesso, sfruttando questa cartella ipotetica, cosa possiamo fare con i nostri fantastici tre.
Punto “ogniLettera” interrogativo.
Il primo simbolo che andremo ad analizzare è il punto interrogativo. Questo carattere viene interpretato (dalla shell) come “qui ci può stare qualsiasi carattere”. Lo so, il mio linguaggio tecnico non è dei migliori, ma un esempio sono sicuro cancellerà ogni dubbio.
Supponiamo di scrivere in un terminale
rm ciao?.txt
La nostra shell, adesso, rimuoverà i seguenti files ciao1.txt ciao2.txt ciao3.txt ciao4.txt ciao5.txt ciao6.txt ciao7.txt ciao9.txt ciao9.txt
, ma lascerà stare gli altri, in quanto uno ha un estensione diversa (.ogg) rispetto a quella richiesta, e gli altri non rientrano nella richiesta, in quanto non hanno “un carattere qualsiasi tra ciao e .txt” ma due caratteri.
Allo stesso modo, scrivere
rm ciao1?.txt
eliminerà ciao11.txt ciao12.txt
e ciao13.txt
.
Asterisco, detto “tutto fa brodo”.
Il secondo carattere speciale è l’asterisco. Il significato di questo simbolo è “al mio posto va bene tutto, quanti e quali caratteri vuoi”. Per capirci, se scriviamo
rm ciao*.txt
verranno rimossi tutti i files tranne ciao11.ogg, per via dell’estensione differente. Se scriviamo
rm ciao1?.*
verranno rimossi ciao11.txt ciao12.txt ciao13.txt ciao11.ogg: infatti vengono rimossi tutti i files inizianti per ciao1 (poi, il carattere successivo può essere qualsiasi carattere per via del punto interrogativo) e di qualsiasi estensione (per via dell’asterisco). Se scrivessi
rm *.txt
verrebbero rimossi tutti i files con estensione .txt (quindi resterebbe solo ciao11.ogg). Nel caso in cui io scrivo
rm ciao*
verrebbe cancellato tutto (ma se ci fosse, ad esempio, un file chiamato pippo.txt quello resterebbe intoccato), mentre per eliminare l’intero contenuto della cartella corrente basta scrivere
rm *
La coppia quadrata.
Ultimo carattere speciale, ma non per importanza, che mi accingo a mostrare è la parentesi quadra. I caratteri tra parentesi quadra si comportano come una lista, che può essere definita per enumerazione o per intervallo.
Per capirci, [37]
vuol dire “3 o 7”, quindi se in un terminale scrivo
rm ciao[37].txt
verranno eliminati i files ciao3.txt e ciao 7.txt. Se invece voglio definire la lista per intervallo, basta scrivere (ad esempio) [3-7]
che indica tutti i numeri da 3 a sette (compresi), ragion per cui scrivendo in un terminale
rm ciao[3-7].txt
vedrò cancellare dalla cartella i files ciao3.txt, ciao4.txt, ciao5.txt, ciao6.txt e ciao7.txt.
Spero di avervi un pò rinfrescato la memoria dei rudimenti della bash linux. Sono piccoli dettagli che spesso vengono dimenticati, ma che in alcuni casi possono davvero semplificare la vita dell’utente pinguinese :)