Как я могу найти файл с фиксированной длиной имени, используя ls?

В каталоге у меня есть файлы вроде

lazer_100506 lazer_100707 lazer_091211 lazer_110103 lazer_100406_temp lazer_100622#delete 

и т.д

Как я могу получить список только первых четырех файлов?

 $ ls lazer_...... ls: lazer_......: No such file or directory $ 

  • ACL, ls, «разрешение отклонено» и много вопросительных знаков
  • Как я могу объединить один столбец вывода в список?
  • Эффективный поиск уникальных владельцев файлов и каталогов
  • Каково количество между разрешением файла и владельцем в выводе команды ls -l?
  • Найдите владельца каталога или файла, но верните его только и ничего не сделайте
  • Что означает знак @ в выводе ls на терминале Mac OSX Lion?
  • Как просмотреть файлы на терминале, чтобы мы могли видеть типы файлов, такие как исполняемый файл, ascii и т. Д.?
  • ls: Не показывать каталоги, которые соответствуют одному шаблону в подстановочных поисках, только файлы
  • 4 Solutions collect form web for “Как я могу найти файл с фиксированной длиной имени, используя ls?”

    Существует несколько методов:

    Только ls

     ls lazer_?????? 

    ls и egrep

     ls | egrep '^lazer_.{6}$' 

    find

     find . -regextype posix-egrep -regex '^./lazer_.{6}$' 

    Как отметил SiegeX , Shell сама по себе не понимает регулярных выражений . Если вам нужен точный фильтр ваших файлов, вы должны использовать регулярные выражения и, следовательно, использовать команду типа egrep .

    Здесь файлы, которые вы хотите перечислить, начинаются с lazer_ и за ними следуют только некоторые цифры (возможно, более или менее 6). Я бы сделал это так:

     ls | egrep '^lazer_[[:digit:]]*$' 

    Это регулярное выражение работает так же, как '^lazer_[0-9]*$' .

    Регулярные выражения с egrep также обрабатывают повторение так же, как в ответе wag , если вы хотите ограничить свой список файлами, заканчивающимися ровно на 6 цифр:

     ls | egrep '^lazer_[[:digit:]]{6}$' 

    С zsh вы можете использовать glob как ?(#cN) (здесь флаг c требует, чтобы предыдущий ? Соответствовал точно N раз):

     setopt extendedglob print -rl -- ?(#c12) 

    если вы предпочитаете ls :

     ls -d -- ?(#c12) 

    Вы также можете добавлять квалификаторы, например, искать рекурсивно для обычных файлов с фиксированной длиной имени:

     print -rl -- **/?(#c12)(.) 

    С ksh93 :

     printf '%s\n' {12}(?) 

    для (не скрытых) файлов, чье имя составлено из 12 символов.

    Или, если вы предпочитаете регулярные выражения:

     printf '%s\n' ~(E)^.{12}$ 
    Linux и Unix - лучшая ОС в мире.