
Como posso encontrar e excluir todos os .jpg
arquivos em uma árvore de diretórios, com exceção daqueles que contêm “amostra” no nome do arquivo?
Por exemplo :
a.zip -> keep it
b.jpg -> delete it
a-sample.jpg -> keep it
b-Sample.jpg -> keep it
Responder1
Para excluir todos os arquivos que terminam em . jpg
(sem distinção entre maiúsculas e minúsculas), exceto para arquivos com sample
nome de arquivo (sem distinção entre maiúsculas e minúsculas:
find . ! -iname '*sample*' -iname '*.jpg' -delete
Isso se repete em todos os diretórios da árvore, começando no diretório atual.
Como funciona:
.
Isso especifica que começamos com o diretório atual.
! -iname '*sample*'
Isso instrui
find
a ignorar todos os arquivos comsample
seus nomes. Oi
in-iname
torna este teste insensível a maiúsculas e minúsculas.-iname '*.jpg'
Esta condição, que é igual à anterior, procura arquivos que terminam em
.jpg
.-delete
Isso instrui
find
a excluir todos esses arquivos.
Antes de executar o comando acima, você pode testá-lo. Correr:
find . ! -iname '*sample*' -iname '*.jpg'
Isso imprimirá os arquivos de interesse. Se esta lista for boa, execute o comando novamente com -delete
o anexo.
Responder2
No bash, você pode usar
shopt -s extglob
para ativar a correspondência negativa:
rm !(*[Ss]ample*).jpg
Para corresponder às subpastas também, ative
shopt -s globstar
e use a estrela dupla:
rm **/!(*[Ss]ample*).jpg