Usando find no terminal macOS com regex

Usando find no terminal macOS com regex

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

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 é localizar e excluir os arquivos que terminam em 2 a 4 dígitos + 'x' + 2 a 4 dígitos. Posso criar esta partida emRegexrusando a expressão .*(\d{2,4}x\d{2,4}).jpg(esta expressão destaca tudo, exceto 1_2.jpg).

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

Estou confuso!

Responder1

Existem alguns problemas aqui. Em primeiro lugar, como John mencionou, -namefaz correspondência de substring com globs, você precisa usar -regexe, em segundo lugar, existem incompatibilidades de dialeto de expressão regular. Por padrão, GNU find usa expressões regulares Emacs e BSD find usa expressões regulares posix-basic. Se você find.infoinstalou, pode ler mais sobre isso aqui:

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

Os dialetos de expressões regulares suportados podem ser encontrados aqui:

info find.info 'Reference' 'Regular Expressions'

Aqui:

* findutils-default regular expression syntax::
* emacs regular expression syntax::
* gnu-awk regular expression syntax::
* grep regular expression syntax::
* posix-awk regular expression syntax::
* awk regular expression syntax::
* posix-basic regular expression syntax::
* posix-egrep regular expression syntax::
* egrep regular expression syntax::
* posix-extended regular expression syntax::

GNU encontrar

Você pode fazer sua expressão funcionar posix-extendedassim com 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 BSD

Não tenho acesso ao BSD find, mas acho que isso deve funcionar:

find -E . -regex '.*[0-9]{2,4}x[0-9]{2,4}\.jpg'

informação relacionada