Я хочу скопіювати всі файли з розширенням aaa
з каталогу a
до каталогу b
, замінивши розширення на bbb
. Я намагався зробити щось подібне:
ls a | grep .bla$ | cut --delimiter=. -f 1 | xargs cp a/{}.aaa b/{}.bbb
Але це насправді вимкнено. Я хочу один лайнер, а не скрипт bash.
Відповіді:
4 для відповіді № 1Я думаю, ви ускладнюєте проблему занадто складно, якщо цільовий каталог порожній, ви можете зробити це за допомогою наступного один-вкладиш:
cp a/*.aaa b; rename "s/aaa$/bbb/" b/*.aaa
Сценарій використовує дві команди з ;
між ними виконати другий після першого.
cp a/*.aaa b
копіює всі файли з малюнком a/*.aaa
до b
каталог. Роблячи це за допомогою одного виклику, команда також буде ефективнішою, ніж використання каналу.
Далі rename
є утилітою для виконання регулярного виразу знайти і замінити на імена файлів. Вказавши b/*.aaa
Ви перейменуєте всі файли в b
з *.aaa
регулярне вираження. Тепер вам потрібно лише вказати, що замінити, це робиться за допомогою регулярного виразу:
s/aaa$/bbb/
aaa$
означає, що мають бути останні три символи aaa
і ви заміните їх на bbb
для кожного файлу.
2 для відповіді № 2
Інший спосіб
cp -r a/ b/;for i in b/*; do mv {$i%.aaa}{.aaa,.bbb};done