Использование find в терминале macOS с регулярным выражением

Использование find в терминале macOS с регулярным выражением

Я пытаюсь выполнить поиск в папке, содержащей вариации разных имен файлов изображений:

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

План состоит в том, чтобы найти и удалить файлы, заканчивающиеся на 2-4 цифры + 'x' + 2-4 цифры. Я могу создать это соответствие наРегексрс использованием выражения .*(\d{2,4}x\d{2,4}).jpg(это выражение выделяет все, кроме 1_2.jpg).

Однако запуск find . -name ".*(\d{2,4}x\d{2,4}).jpg"не дал никаких результатов.

Я в замешательстве!

решение1

Здесь есть пара проблем. Во-первых, как сказал Джон, -nameдля сопоставления подстрок с globs вам нужно использовать -regex, а во-вторых, есть несовместимости диалектов регулярных выражений. По умолчанию GNU find использует регулярные выражения Emacs, а BSD find использует регулярные выражения posix-basic. Если вы установили, find.infoвы можете прочитать об этом подробнее здесь:

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

Поддерживаемые диалекты регулярных выражений можно найти здесь:

info find.info 'Reference' 'Regular Expressions'

Здесь:

* 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-найти

Вы можете заставить ваше выражение работать posix-extendedследующим образом с помощью GNU find:

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

Выход:

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

BSD найти

У меня нет доступа к BSD find, но я думаю, что это должно сработать:

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

Связанный контент