Найти имена файлов с расширением в верхнем регистре

Как найти все файлы с расширением в верхнем регистре рекурсивно в каталоге.

Я пробовал :

$ find -name "*.[A-Z][A-Z][A-Z]"

вроде работает, но конечно это не проверяет файлы с более чем 3 буквы после последней точки.

5
задан 40detectives
07.03.2023 18:39 Количество просмотров материала 3381
Распечатать страницу

2 ответа

следующие работы для простых случаев:

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:]]+$'

Я боюсь, что мы, носители английского языка, можем легко забыть такое вопросы.

5
отвечен AFH 2023-03-09 02:27

вы можете использовать опцию 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.

2
отвечен Paulo 2023-03-09 04:44

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх