перечисление файлов с шаблоном с началом и окончанием

Я хочу перечислить все файлы в каталоге, начинающемся с «abc» и заканчивая «.zip»

Я пытаюсь использовать ls .

В каталоге много zip-файлов, начиная с abc<date> и xvz<date> . Я хочу получить список abc<date>.zip

  • Список файлов с момента времени X до времени Y
  • Как я могу назначить вывод команды переменной оболочки?
  • Почему bash дает мне (видимо) противоречивую информацию о файле?
  • Что означает размер каталога в выводе команды ls -l?
  • Список аргументов слишком длинный при запуске команды ls -d "$ PWD" / *
  • Как сохранить отсортированные файлы в отдельном каталоге?
  • Список недавно измененных файлов
  • Почему `ls` перечисляет следующие файлы в, казалось бы, разных порядках?
  • 3 Solutions collect form web for “перечисление файлов с шаблоном с началом и окончанием”

    ls не выполняет сопоставление образцов по именам файлов. Он просто перечисляет содержимое каталогов и файлов, которые он предоставляет в качестве аргументов.

    С другой стороны, ваша оболочка имеет функцию под названием globbing или имя файла, которая расширяет шаблон в список файлов, соответствующих этому шаблону.

    Здесь этот шаблон glob будет abc*.zip ( * является подстановочным знаком, обозначающим любое количество символов ).

    Вы передали бы его любой команде, например, printf для печати:

     printf '%s\n' abc*.zip 

    Вы также можете передать его ls -l для отображения атрибутов этих файлов:

     ls -ld abc*.zip 

    (нам нужен -d потому что, если какой-либо из этих файлов имеет тип каталога , ls будет перечислить их содержимое в противном случае).

    Или unzip их, если только unzip может извлекать более одного файла за раз. К сожалению, это не так, поэтому вам нужно либо использовать xargs -n1 либо цикл for :

     printf '%s\0' abc*.zip | xargs -r0n1 unzip 

    Или:

     for file in abc*.zip; do unzip "$file"; done 

    Но на самом деле, unzip больше похож на порт команды MS-DOS, unzip сам будет рассматривать его аргумент как glob. Другими словами, unzip 'abc*.zip' не будет распаковать файл с именем abc*.zip (совершенно корректное имя файла в Unix, а не в операционных системах Microsoft), но файлы, соответствующие шаблону abc*.zip , так что вы 'действительно хочу:

      unzip 'abc*.zip' 

    (На самом деле наши xargs и for подхода выше были бы неправильными, потому что если есть файл с именем abc*.zip например, unzip будет рассматривать его как шаблон! См. bsdtar для более уникального способа извлечения zip архивов)


    Для нечувствительного к регистру соответствия вы должны использовать [aA][bB][cC]*.[zZ][iI][pP] портативно. В некоторых оболочках расширенные операторы глобулизации для нечувствительности к регистру:

    • zsh :

       setopt extendedglob ls -ld (#i)abc*.zip 

      Или:

       ls -ld ((#i)abc)*.zip 

      если вы хотите, чтобы часть abc была нечувствительной к регистру.

    • ksh93 :

       ls -ld ~(i)abc*.zip 

      или:

       ls -ld ~(i:abc)*.zip 
    • с bash .

       shopt -s nocaseglob ls -ld abc*.zip 

      (нет возможности иметь только те детали, которые хранятся в этом случае, кроме использования портативного синтаксиса).

    • с yash :

       set +o case-glob ls -ld abc*.zip 

      то же замечание, что и для bash выше.

     ls abc*.zip 

    Однако это приведет к сбою, если слишком много файлов (существует ограничение на расширение оболочки с точки зрения того, сколько аргументов он может расширить).

     find . -name "abc*.zip" 

    Это, вероятно, самый универсальный. Кавычки должны быть там. С некоторыми реализациями find вы также можете использовать -iname вместо -name для поиска без aBc<date>.ZIP регистра ( aBc<date>.ZIP также будет соответствовать).

     ls | grep -x "abc.*\.zip" 

    Обратите внимание .* И \. поскольку фильтр grep использует regex, который отличается от символа подстановки, используемого оболочкой для расширения. Используйте grep -i для поиска без учета регистра.

    Попробуйте использовать ls abc*.zip чтобы сузить результаты до тех, которые соответствуют вашим критериям для начальной строки abc и окончания .zip. Звездочка будет расширяться, чтобы соответствовать этим результатам без включения стартовых символов xvz.

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