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 символов. Обратите внимание, что это регулярное выражение применяется к полному имени, включая путь.