Usando find no terminal macOS com regex

1

Estou tentando pesquisar uma pasta que contém variações em diferentes nomes de arquivos de imagem:

1_2-300x224.jpg
1_2-600x449.jpg
1_2-600x600.jpg
1_2-768x575.jpg
1_2-802x600.jpg
1_2.jpg

O plano é encontrar e excluir os arquivos que terminam em 2-4 dígitos + 'x' + 2-4 dígitos. Eu posso criar este jogo em Regexr usando a expressão .*(\d{2,4}x\d{2,4}).jpg (esta expressão destaca tudo, exceto por 1_2.jpg ).

No entanto, a execução de find . -name ".*(\d{2,4}x\d{2,4}).jpg" não retorna resultados.

Estou desconcertado!

    
por minttoothpick 09.03.2018 / 22:07

1 resposta

1

Há alguns problemas aqui. Em primeiro lugar, como John mencionou, -name faz correspondência de subcadeia com globs, você precisa usar -regex e, em segundo lugar, há incompatibilidades de dialeto de expressão regular. Por padrão, o GNU find usa expressões regulares do Emacs e o BSD localiza usos expressões regulares posix-básicas. Se você tem find.info instalado, pode ler mais sobre isso aqui:

info find.info 'Reference' 'Regular Expressions' 'emacs regular expression'

Dialetos de expressão regular suportados podem ser encontrados aqui:

info find.info 'Reference' 'Regular Expressions'

encontrar GNU

Você pode fazer sua expressão funcionar com posix-extended , assim com o GNU find:

find . -regextype posix-extended -regex '.*[0-9]{2,4}x[0-9]{2,4}.jpg'

Saída:

./1_2-600x600.jpg
./1_2-802x600.jpg
./1_2-600x449.jpg
./1_2-300x224.jpg
./1_2-768x575.jpg

encontrar o BSD

Eu não tenho acesso ao BSD, mas acho que isso deve funcionar:

find -E . -regex '.*[0-9]{2,4}x[0-9]{2,4}\.jpg'
    
por 09.03.2018 / 22:46