Как найти все файлы с расширением в верхнем регистре рекурсивно в каталоге.
Я пробовал :
$ find -name "*.[A-Z][A-Z][A-Z]"
вроде работает, но конечно это не проверяет файлы с более чем 3 буквы после последней точки.
Как найти все файлы с расширением в верхнем регистре рекурсивно в каталоге.
Я пробовал :
$ find -name "*.[A-Z][A-Z][A-Z]"
вроде работает, но конечно это не проверяет файлы с более чем 3 буквы после последней точки.
следующие работы для простых случаев:
find -name "*.*[A-Z]*" ! -name "*.*[^A-Z]*"
это может произойти сбой для файлов с двумя или более точками в имени. Для этого нужно использовать регулярные выражения, например, с grep
:
find | grep '\.[A-Z][A-Z]*$'
или egrep
:
find | egrep '\.[A-Z]+$'
следующий комментарий Камиль Maciorowski, ответ мог быть сделан независимым от локали с помощью [:upper:]
на месте A-Z
, например:
find | egrep '\.[[:upper:]]+$'
Я боюсь, что мы, носители английского языка, можем легко забыть такое вопросы.
вы можете использовать опцию RE with-regex
find -regextype posix-egrep -regex '.*\.[A-Z]{3}'
есть некоторые моменты, используя RE с find, я узнал, что в книге pt_BR.
-regex
параметр хочет соответствовать всему пути, поэтому .*
матчи все
перед фактическим RE вы хотите соответствовать.
Если RE может быть в середине, другой .*
должно быть место в конце.
на -regextype
говорит что мета-символы должны быть экранированы или нет.
Я знаю, что в Unix/БСД find -E
разрешает все мета-символы
unescaped, а в GNU/Linux то же самое -regextype posix-extended
,
-regextype posix-awk
или -regextype posix-egrep
.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]