Можно ли использовать подстановочные знаки оболочки для выбора имен файлов в диапазоне двузначных чисел (например, от foo_1.jpg до foo_54.jpg)? - PullRequest
27 голосов
/ 22 июня 2011

У меня есть каталог с файлами изображений foo_0.jpg до foo_99.jpg. Я хотел бы скопировать файлы с foo_0.jpg по foo_54.jpg.

Возможно ли это только с использованием подстановочных знаков bash?

Я думаю, что-то вроде cp foo_[0-54].jpg, но я знаю, что это выбирает 0-5 и 4 (верно?)

Кроме того, если это невозможно (или неэффективно) только с подстановочными знаками, что будет лучшим способом сделать это?

Спасибо.

Ответы [ 4 ]

48 голосов
/ 22 июня 2011

Я предполагаю, что вы хотите скопировать эти файлы в другой каталог:

cp -t target_directory foo_{0..54}.jpg
9 голосов
/ 22 июня 2011

Мне нравится Гленн Джекман ответ, но если вы действительно хотите использовать глобирование, вам также может помочь следующее:

$ shopt -s extglob
$ cp foo_+([0-9]).jpg $targetDir

В расширенном глобировании +() соответствует одному или несколькимэкземпляры любого выражения в скобках.

Теперь это скопирует ВСЕ файлы с именем foo_, за которыми следует любое число, за которым следует .jpg.Это будет включать foo_55.jpg, foo_139.jpg и foo_1223218213123981237987.jpg.

Если подумать, у Гленна Джекмана лучший ответ.Но это дало мне возможность поговорить о расширенном сглаживании .

4 голосов
/ 22 июня 2011

ls foo_ [0-9] .jpg foo_ [1-4] [0-9] .jpg foo_5 [0-4] .jpg

Попробуйте это с помощью ls, и если вам это нравитсязатем сделайте копию.

3 голосов
/ 22 июня 2011
for i in `seq 0 54`; do cp foo_$i.jpg <target>; done
...