Скопіюйте діапазон файлів у командний рядок (ZSH / BASH)


13

У мене є список файлів із послідовними номерами як суфікси. Я хотів би скопіювати лише ряд цих файлів. Як я можу вказати діапазон як частину моєї команди cp.

$ls
P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG*
P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG*

Я хотів би скопіювати файли з P1080275.JPG на P1080283.JPG чимось схожим на:

$cp P10802[75-83].JPG ~/Images/.

Чи є спосіб це зробити?

Відповіді:


25

Ви були дуже близько. Ваше запитання було майже правильним синтаксисом:

cp P10802{75..83}.JPG ~/Images

9

Щоб повторити діапазон в bash:

for x in {0..10}; do echo $x; done

Застосовуйте те саме у вашому випадку:

for x in {272..283}; do cp P1080$x.JPG ~/Images; done

Це працює, але мені подобається відповідь @glenn jackman, оскільки вона не посилається на будь-яку програму програмування.
Амджіт

4

Zsh, за допомогою опції Exteglob має оператор глобінгу (узгодження зразком).

setopt extendedglob
echo P10802<75-83>.JPG

буде відповідати назви файлів у поточному каталозі, які відповідають цьому шаблону (будьте уважні, що P1080275.JPG відповідає, але так само P108020000000075.JPG)

З іншого боку, оператор розширення рядків {x ... y} (підтримується zsh та останніми версіями bash та ksh93) розширюється до рядків від x до y, незалежно від того, які файли є у поточному каталозі.

cp P10802<75-83>.JPG ~there

буде копіювати відповідні файли, так само буде

cp P10802{75..83}.JPG ~there

Але ви отримаєте помилки, якщо, наприклад, P1080281.JPG не існує.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.