Перечислите все файлы, заканчивающиеся на 10 или 11 или 12

Чтобы перечислить все файлы, заканчивающиеся на 10 или 11 или 12, я попытался использовать ls *[10-12] и ls *[10,11,12] но они не работают. Я не знаю почему. Может кто-нибудь мне помочь?

  • Можно ли показать, как работает бас-глобус?
  • Удалите все файлы с префиксом, кроме одного из самых больших
  • Создать файл с использованием шаблона в абсолютном пути
  • Как скопировать несколько файлов, но сохранить их расширения одинаково?
  • Как удалить файлы с помощью ~?
  • Переместить каждый файл, который не является каталогом
  • Скопировать файлы .txt в определенную директорию
  • Что именно сделал mv / tmp / folder / * / * в моей файловой системе?
  • 4 Solutions collect form web for “Перечислите все файлы, заканчивающиеся на 10 или 11 или 12”

    [...] соответствует одному символу, если он указан в указанном наборе.

    [10-12] означает либо символ 1 либо символы от 0 до 1 или символ 2 так же, как [102] или [0-2] .

    [10,11,12] означает либо 1 , 0 [10,11,12] … … так же, как [,0-2] .

    Здесь вы хотите:

     ls -d -- *1[0-2] 

    То есть (не скрытые) имена файлов, которые заканчиваются на 1, за которым следует любой из 0 , 1 или 2 символов.

    Теперь остерегайтесь, что он также соответствует foo110 или foo112345612 .

    Если вы этого не хотите, тогда вам понадобится что-то вроде:

     ls -d -- *[!0-9]1[0-2] 1[0-2] 

    Это, однако, не соответствовало бы foo010

    Если из foo10 , foo00010 , foo110 вы хотите, чтобы foo10 и foo00010 соответствовали, то с ksh или bash -O extglob или zsh -o kshglob :

     ls -d -- !(*[0-9])*(0)1[0-2] 

    Обратите внимание, что, за исключением zsh , если какой-либо из этих шаблонов не соответствует, шаблоны будут передаваться как-есть в ls , поэтому вы можете лишить список нежелательных файлов, если есть такие файлы. С помощью bash вы можете установить параметр failglob чтобы обойти это.

    zsh – единственная оболочка, которая имеет оператор glob для соответствия диапазонам чисел.

     ls -d -- *<10-12> 

    будет соответствовать файлам, заканчивающимся числом от 10 до 12. Он также будет соответствовать foo110 так как foo1 следует за 10 . Вы могли бы сделать (с extendedglob ):

     ls -d -- (^*[0-9])<10-12> 

    хоть.

    zsh также является оболочкой, которая ввела тип расширения {10..12} расширения скобок (скопировано ksh93 и bash несколько лет спустя).

    Однако, подобно эквиваленту {10,11,12} , который не является глобированием. Это форма расширения, которая выполняется перед глобализацией.

     ls -d -- *{10..12} 

    сначала расширяется до:

     ls -d -- *10 *11 *12 

    Если какой-либо из этих трех глобусов терпит неудачу, команда отменяется в zshbash -O failglob ).

    Это должно работать:

     ls -d -- *1[0-2] 

    Помните, что [] представляет набор символов, а в случае чисел он может перейти от [0-9]

    Попробуй это :

     ls *{10,11,12} 

    или

     ls -l *{10,11,12} 

    (не может показывать скрытые файлы)

    ls *@(10|11|12) – это то, что вы ищете.

    Для этого необходимо, чтобы extglob с помощью shopt , т. shopt -s extglob . Кроме того, вы можете добавить эту строку в ~/.bashrc чтобы окончательно включить ее.

    Для получения дополнительной информации о том, почему это работает, см. Официальную страницу руководства Bash по сопоставлению с образцом .

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