1

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

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 цифры. Я могу создать это соответствие в Regexr, используя выражение .*(\d{2,4}x\d{2,4}).jpg (это выражение выделяет все, кроме 1_2.jpg).

Тем не менее, работает find . -name ".*(\d{2,4}x\d{2,4}).jpg" возвращает результатов.

Я сбит с толку!

1 ответ1

1

Здесь есть пара вопросов. Во-первых, как упоминал Джон, -name выполняет сопоставление подстрок с глобусами, вам нужно использовать -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'

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'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .