/ / Скопіюйте всі файли з певним розширенням в інший каталог, змінюючи при цьому розширення - linux, bash, shell, grep, cut

Скопіюйте всі файли з певним розширенням до іншого каталогу при зміні розширення - linux, bash, shell, grep, cut

Я хочу скопіювати всі файли з розширенням 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