Mi sono imbattuto in schemi e caratteri jolly strabilianti e di particolare interesse per me [!]
.
Questo costrutto è simile al
[!]
costrutto, tranne che per far corrispondere qualsiasi carattere tra parentesi, corrisponderà a qualsiasi carattere, purché non sia elencato tra[
e]
.
rm myfile [!192]
Quanto sopra credo che rimuoverà qualsiasi / tutti i file, ad eccezione di qualsiasi / tutti i file che hanno 192 nel loro nome.
Sono preoccupato tuttavia per il corretto utilizzo di questo con un'estensione di file e in particolare molteplici condizioni.
Quale sarebbe la sintassi corretta in una situazione del genere?
rm myfile [!.gif .csv. mp3]
o
rm myfile [!.gif !.csv !.mp3]
La mia preoccupazione è che il periodo potrebbe essere fuori luogo, e quindi qualsiasi file con un .
(che sarebbe sicuramente uno di loro?) Sarebbe quindi manipolato, quando sto cercando di causare la manipolazione di file specifici.
Questo costrutto è simile al [ ]
costrutto, tranne che per far corrispondere qualsiasi carattere tra parentesi, corrisponderà a qualsiasi carattere, purché non sia elencato tra [
e ]
.
(citato da http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm )
Adesso; secondo me !
è sufficiente un singolare , e tutti i valori che seguono sono contenuti all'interno dell'intervallo.
[!]
è simile ma non simile[!]
^
ha lo stesso significato esatto di !
in questo contesto, quindi [^a]
esclude a
esattamente come [!a]
fa: Se il primo carattere che segue il [è un! oppure a ^ allora viene abbinato qualsiasi carattere non racchiuso. ( man bash
)
rm myfile [!192]
rimuoverà myfile
, così come qualsiasi singolo file-personaggio non di nome 1
, 9
o 2
.
ls my-pattern
oecho my-command
per verificare se il globbing è fatto nel modo che preferisci, prima di corrererm