Eu me deparei com padrões esbugalhados e curingas e é particularmente interessante para mim [!].
Essa construção é semelhante à
[!]construção, exceto que, em vez de corresponder a qualquer caractere dentro dos colchetes, ela corresponderá a qualquer caractere, desde que não esteja listada entre[e].
rm myfile [!192]
O que eu acredito acima removerá todos os arquivos, exceto todos os arquivos com 192 em seu nome.
No entanto, estou preocupado com o uso adequado disso com uma extensão de arquivo e, em particular, com várias condições.
Qual seria a sintaxe apropriada em tal situação?
rm myfile [!.gif .csv. mp3]
ou
rm myfile [!.gif !.csv !.mp3]
Minha preocupação é que o período possa ser extraviado e, portanto, qualquer arquivo com um .(que certamente seria um deles?) Seria manipulado quando estou procurando causar a manipulação de arquivos específicos.
Essa construção é semelhante à [ ]construção, exceto que, em vez de corresponder a qualquer caractere dentro dos colchetes, ela corresponderá a qualquer caractere, desde que não esteja listada entre [e ].
(citado em http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm )
Agora; para mim, isso sugere que um singular !é suficiente, e todos os valores a seguir são contidos no intervalo.
[!]é semelhante, mas não como[!]
^tem exatamente o mesmo significado que !neste contexto, portanto [^a]exclui aexatamente como [!a]faz: Se o primeiro caractere após o [for a! ou a ^, qualquer caractere não incluído é correspondido. ( man bash)
rm myfile [!192]irá remover myfile, bem como qualquer arquivo de um único caractere não nomeado 1, 9ou 2.
ls my-patternouecho my-commandpara verificar se o englobamento é feito da maneira que quiser, antes de executarrm