Excluindo arquivos, exceto se o nome contiver uma substring

0

Estou usando o seguinte comando para excluir arquivos em uma pasta. Mas meu comando está apagando tudo.

ionice -c 3 find . -type f -print -delete

Eu não quero excluir um arquivo se tiver um sufixo _y .

Então, minha visualização de pastas:

123a.jpg -> Should delete
4567.jpg -> Should delete
7644_y.png -> Should not delete
12234_y.jpeg -> Should not delete
5753.jpg -> Should delete

Como deve ser o meu comando para conseguir isso?

    
por Tolgay Toklar 19.06.2017 / 00:31

2 respostas

3

Com base nos seus exemplos, você deseja excluir arquivos cujo nome contenha uma _y substring .

find . -type f ! -name '*_y*' -print -delete

(Com ionice -c 3 na frente, se você quiser, isso é independente do que você faz com find .)

Se você quisesse manter os arquivos somente se _y estivesse no final do nome base (então 12234_y_.jpeg seria excluído), você poderia usar

find . -type f ! -name '*_y.*' -print -delete
    
por 19.06.2017 / 00:38
1

Se você estiver usando find especificamente para recorrer a subdiretórios, essa resposta não se aplica. Se, no entanto, você estiver excluindo apenas arquivos no diretório atual, uma opção específica do bash é:

shopt -s extglob
rm -v !(*_y.*)

Isso tem a limitação adicional de tentar excluir arquivos que não são arquivos (diretórios) que correspondem ao padrão.

    
por 19.06.2017 / 02:30