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

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

lazer_100506 lazer_100707 lazer_091211 lazer_110103 lazer_100406_temp lazer_100622#delete 

и т.д

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

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

  • Почему в директориях / dev для каталогов, например pts?
  • Использование dircolors, как изменить цвет моих папок subversion
  • ls with find :: сообщить общий размер
  • Как найти 4-й и 5-й символы имени файла?
  • Что означает @ перед именем каталога?
  • Можно ли отображать содержимое каталога без его изменения?
  • Лучший способ только перечислить файлы, которыми я владею
  • Проводя результат 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}$ 
    Interesting Posts

    Linux как производительность виртуализации хоста и клиента в Core i7?

    Цвета Gnome не отображаются правильно, Vim тоже

    Как я могу получить количество файлов в каталоге с помощью командной строки?

    Как / Где узнать о ядре Linux?

    Bash: синтаксическая ошибка около неожиданного токена 'done'

    Использование xorg в Lenovo Ideapad

    grep caret, похоже, не имеет эффекта

    Как продолжить скрипт после закрытия X?

    Как обновить хром (F5) из сценария оболочки в debian (альтернатива xdotool)

    Нет такого файла или каталога при копировании файлов в текущий каталог

    Показывать только строки, которые находятся во всех текстовых файлах, по крайней мере, один раз

    Редактируйте несколько строк из определенного раздела INI-файла

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

    Создать и открыть файл с помощью одной команды?

    Создайте массив в сценарии bash из установленных внешних USB-накопителей на macOS

    Linux и Unix - лучшая ОС в мире.