Outra opção seria usar a opção globstar do bash:
shopt -s globstar
para listar:
ls **/*[0-9][0-9][0-9]x[0-9][0-9][0-9].jpg
ou remova:
rm **/*[0-9][0-9][0-9]x[0-9][0-9][0-9].jpg
os arquivos.
O padrão glob acima é ligeiramente diferente do que o regex que você forneceu; o regex permitiria qualquer dois caracteres após o x
, não estritamente números. Em outras palavras, um arquivo chamado: somefile-135xyz9.jpg
corresponderia à regex, mas não à glob. Acima.
O glob recursivamente ( **
) corresponde a arquivos que:
- inicie com qualquer coisa (
*
)
- tem três números (três
[0-9]
)
- seguido por um
x
- seguido por três números
- seguido por
.jpg
Um risco para essa abordagem é se / quando o número de arquivos correspondentes excede o espaço de argumento da linha de comando. Nesse caso, você pode salvar os nomes de arquivos em uma matriz e, em seguida, percorrer a matriz individualmente.
Para investigar:
files=(**/*[0-9][0-9][0-9]x[0-9][0-9][0-9].jpg)
for file in "${files[@]}"; do echo Would: rm -- "$file"; done
Para remover:
files=(**/*[0-9][0-9][0-9]x[0-9][0-9][0-9].jpg)
for file in "${files[@]}"; do rm -- "$file"; done