Linux: найдите имена файлов с 4 или 5 символами

Как я могу найти имена файлов, состоящие из 4 или 5 символов?

Для имен файлов с 4 символами я могу использовать find . -name ????.tgz, но как мне увеличить это до 4 или 5?

3 ответа

shopt -s extglob globstar
printf '%s\n' **/?????(?).tgz
  • extglob: включает расширенную глобализацию
  • globstar: ** будет соответствовать все файлы и ноль или более каталогов и подкаталогов
  • ?: соответствует любому отдельному символу
  • ?(pattern-list): соответствует нулю или одному вхождению данных паттернов

Или просто:

printf '%s\n' **/????.tgz **/?????.tgz

Вот одно из решений:

find . \( -name "????.cpp" -o -name "?????.cpp" \)

-o для логического ИЛИ

просто замени .cpp с .tgz или что хочешь. Существует также версия регулярного выражения, которая будет делать то же самое:

find . -regextype posix-egrep -regex '^./[a-zA-Z]{4,5}\.cpp$'

в регулярном выражении ^ это начальный символ ^./ значит начинается с ./, [a-zA-Z]{4,5} означает, что следуют от 4 до 5 символов, \. значит . где \ это побег персонаж \.cpp$ значит заканчивается .cpp

Если имя файла содержит цифры вместо [a-zA-Z] делать [a-zA-Z0-9], Так это будет выглядеть так:

find . -regextype posix-egrep -regex '^./[a-zA-Z0-9]{4,5}\.cpp$'

Вы могли бы использовать это find команда:

find -type f -regextype egrep -regex ".*/[^./]{4,5}\.[^./]+$" 

Регулярное выражение установлено поймать любой файл с базовым именем с 4 или 5 символов. Обратите внимание, что это регулярное выражение применяется к полному имени, включая путь.

Другие вопросы по тегам