Eu tenho vários arquivos com o mesmo nome de arquivo base. Eu gostaria de remover todos, exceto um
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Se eu não precisasse ficar com um, sei que poderia usá-lo rm foo.*
.
O TLDP demonstra ^
para negar uma correspondência. Por tentativa e erro, consegui descobrir que
rm foo.*[^org]
faz o que eu preciso, mas eu realmente não entendo a sintaxe.
Além disso, embora não seja uma limitação no meu caso de uso, acho que esse padrão também ignora foo.o
e foo.or
. Como é que este trabalho padrão, e o que seria um glob que ignora única foo.org
parece?
Regular Expression
. Você deve ter cuidado com seus personagens de agrupamento. Usando suportes que você especificou um significado classe de personagem que você exclua todos os arquivos que tinham uma extensão com as letras o
, r
ou g
em qualquer ordem. Use parênteses para criar um grupo e preservar a ordem dos caracteres.
foo.*[^org]
corresponderá a qualquer nome de arquivo que comece com foo.
um ou mais caracteres após o ponto em que o último caractere não é o, r ou g. Então, seria igual foo.orb
, mas não foo.org
ou foo.or
ou foo.o
. A resposta de GlennJackman mostra como habilitar os recursos estendidos de correspondência de padrões para negar uma correspondência.
rm foo.*[^org]
remove todos os arquivos cujo último caractere não é nemo
,r
oug
, portanto, tambémfoo.foo
não corresponderia.