У меня есть несколько изображений с именем сгенерированной строки uuid1. Например, 81397018-b84a-11e0-9d2a-001b77dc0bed.jpg. Я хочу узнать все эти изображения, используя команду "найти":
find . -regex "[a-f0-9\-]\{36\}\.jpg".
Но это не работает. Что-то не так с регулярным выражением? Может ли кто-нибудь помочь мне с этим?
Ответы:
Обратите внимание, что вам нужно указать
.*/
в начале, потому чтоfind
соответствует весь путь.Пример:
Моя версия найти:
источник
"^ ... $"
окружение вашего регулярного выражения. Он должен соответствовать ВСЕЙ строке результата./
в.*/
потому , что.*
соответствует нулю или более (почти) любого характера.\{36\}
valid types are 'findutils-default', 'awk', ' egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix -extended', 'posix-minimal-basic', 'sed'.
-regextype
флаг , прежде чем на-regex
флаг, в противном случае она не применяется!-regex
Выражение находки соответствует полному имени , в том числе относительного пути от текущего каталога. Ибоfind .
это всегда начинается с./
любых каталогов.Кроме того, это
emacs
регулярные выражения, которые имеют другие экранирующие правила, чем обычные регулярные выражения egrep.Если все они находятся непосредственно в текущем каталоге, то
должно сработать. (Я не совсем уверен - я не могу заставить подсчитанное повторение работать здесь.) Вы можете переключиться на выражения egrep
-regextype posix-egrep
:(Обратите внимание, что все сказанное здесь для GNU find, я ничего не знаю о BSD, который также используется по умолчанию на Mac.)
источник
posix-egrep
тип работал для меня.-regextype
что это вариант для GNU,find
а не BSD (по крайней мере, не для Mac, похожего на BSD)find
. Если эта опция недоступна, обязательно установите GNU find. Если на Mac это возможно с пакетом brewfindutils
. Найти можно черезgfind
.Судя по другим ответам, похоже, что в этом может быть ошибка.
Однако вы можете сделать это следующим образом:
find . * | grep -P "[a-f0-9\-]{36}\.jpg"
Возможно, вам придется немного настроить grep и использовать разные опции в зависимости от того, что вы хотите, но это работает.
источник
find
«S-prune
функциональности , которая пропустит через определенные каталоги в целом. Чаще всего это не очень важно, но стоит упомянуть.в Mac OS X (поиск BSD) :
.*/
совпадает с принятым ответом, префикс необходим для полного пути:man find
говорит, что-E
использует расширенную поддержку регулярных выраженийисточник
-E
недоступно в Ubuntu (протестировано в WSL Ubuntu)Попробуйте использовать одинарные кавычки ('), чтобы избежать экранирования вашей строки. Помните, что выражение должно соответствовать всему пути, т.е. должно выглядеть так:
Кроме того, похоже, что моя находка (GNU 4.4.2) знает только основные регулярные выражения, особенно не синтаксис {36}. Я думаю, вам придется обойтись без этого.
источник
Простой способ - вы можете указать. * В начале, потому что поиск соответствует всему пути.
найти версию
источник
Вы должны использовать абсолютный путь к каталогу при применении инструкции find с регулярным выражением. В вашем примере
должен быть изменен на
В большинстве систем Linux некоторые дисциплины в регулярных выражениях не могут быть распознаны этой системой, поэтому вы должны явно указать -regexty как
источник