Как будто он не признает группу регулярных выражений
Это именно то, что происходит.
В вашем регулярном выражении нет ничего плохого, но он написан на диалоге PCRE или ERE, который find
не ожидает. Если вы скажете find
интерпретировать его как ERE, это будет соответствовать, как вы хотели:
# GNU
find . -regextype posix-extended ! -regex ".*(jpeg|jpg|gif|pdf)+$"
# macOS
find . -E ! -regex ".*(jpeg|jpg|gif|pdf)+$"
Было бы также хорошо работать по умолчанию в Perl, Java, RE2, egrep
, Баш =~
, awk
, и многое других инструментов, которые также используют PCRE или ERE.
Однако он не работает в Emacs или BRE, что и ожидает GNU и macOS соответственно.
Решение Inian работает, переписывая свой шаблон из стиля ERE в стиль Emacs, где вместо (|)
используется (|)
(а также другие улучшения).
tl; dr: копирование регулярного выражения из одного инструмента в другое подобно скопированию функции с Java на C#. Они выглядят очень похожими, и это может даже работать, но, скорее всего, потребуется хотя бы некоторая настройка.
Перед расширением файла вам не хватает '.'. – Inian
Ваш метод '-name' на самом деле хорош и переносим (' -regex' не указан POSIX, это только расширение доступно в определенных версиях 'find', например GNU' find'). –