exclui arquivos que correspondem ao padrão

29

Eu preciso recursivamente remover todos os arquivos em todos os subdiretórios onde o nome do arquivo contém um número seguido por um 'x' seguido por um número, pelo menos duas vezes.

Exemplo:

Eu gostaria de remover esses arquivos:

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'

Mas eu não quero remover esses arquivos:

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'

Como posso fazer isso (a partir do bash shell)

    
por mikkelbreum 30.07.2013 / 02:00

2 respostas

59

Uma string contém “um número seguido por um x seguido por um número” se e somente se contiver um dígito seguido por um x seguido por um dígito, ou seja, se ele contiver uma substring correspondente ao padrão [0-9]x[0-9] . Então, você está procurando remover os arquivos cujo nome corresponde ao padrão *[0-9]x[0-9]*[0-9]x[0-9]*.jpg .

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete

Se o seu find não tiver -delete , chame rm para excluir os arquivos.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +
    
por 30.07.2013 / 02:07
0

O comando certo é:

find . -type f -iregex '.*[0-9]x[0-9]*\.jpg$'

isto irá capturar apenas arquivos com nomes: 'aaa-12x12.jpg', mas não 'aaa-12x12red.jpg'

    
por 04.12.2018 / 14:01