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

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

lazer_100506 lazer_100707 lazer_091211 lazer_110103 lazer_100406_temp lazer_100622#delete 

и т.д

  • Что такое wild card, чтобы выбрать все каталоги в каталоге
  • Принудительно создать жесткую ссылку (ы) каталога?
  • Как сделать размеры файлов ls` в мегабайтах?
  • Почему bash дает мне (видимо) противоречивую информацию о файле?
  • ls colors: почему некоторые из моих шрифтов черные, а другие - зеленые на выходе ls
  • Запуск tcpdump, tee и scp
  • Как я могу получить список только первых четырех файлов?

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

  • Вставка избранных в консоль консоли
  • Zsh - более интеллектуальная автокоррекция
  • только показать исходный файл и целевой файл с помощью `ls`
  • Crontab не запускает сценарий оболочки
  • Каков самый короткий способ найти мой IP-адрес WAN в командной строке?
  • Скрытие командных сообщений в сценарии командной оболочки
  • 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 - лучшая ОС в мире.