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

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

lazer_100506 lazer_100707 lazer_091211 lazer_110103 lazer_100406_temp lazer_100622#delete 

и т.д

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

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

  • Как я могу перечислять скрытые каталоги, затем каталоги, затем скрытые файлы и, наконец, файлы с ls?
  • Команда Linux для возврата всех файлов, начинающихся с TEMP, но не заканчивающихся двойными цифрами
  • Выход из ls имеет символы новой строки, но отображается в одной строке. Зачем?
  • Список файлов PDF с отсутствующими метаданными
  • Когда был открыт последний файл?
  • Нет цветного вывода меньше для команды ls
  • Включить разрывы строк при назначении многострочных выходов для var в bash
  • копирование узлов устройства
  • 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 - лучшая ОС в мире.