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

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

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

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

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.

  • LS_COLORS не соблюдается на Cygwin
  • поведение `ls` на ошибке EACCES для / root и / root / some-frbish
  • Как я могу сократить, если затем еще использовать формат
  • ls -F ИЛИ ls -al - Что означает красная подсветка?
  • Команда ls - определяет количество столбцов
  • Настройка цветов LS с человеко-читаемым скриптом в tcsh
  • Удалить файлы из списка, которые были созданы / изменены в субботу
  • почему ls сообщает об огромном файле, а нет?
  • Как получить последнюю папку (отсортированную по алфавиту в порядке убывания и сопоставление шаблона) с помощью ls / find / etc?
  • Использование ls с командой wc
  • Почему в директориях / dev для каталогов, например pts?
  • Linux и Unix - лучшая ОС в мире.