tar зробить це для вас дуже швидко.
ТЕСТ
Спочатку я створив 2 каталоги та 10 файлів:
% mkdir test1 test2 ; cd test1
% for n in `seq 1 10` ; do touch ABC.file$n ; done
% ls
> ABC.file1 ABC.file2 ABC.file4 ABC.file6 ABC.file8
> ABC.file10 ABC.file3 ABC.file5 ABC.file7 ABC.file9
Потім я скопіював їх:
% tar -cf - ./* |\
tar -C../test2 --transform='s/ABC/DEF/' -xf -
% ls ../test2
> DEF.file1 DEF.file2 DEF.file4 DEF.file6 DEF.file8
> DEF.file10 DEF.file3 DEF.file5 DEF.file7 DEF.file9
ТРАНСФОРМАЦІЯ
Таким чином, GNU tarприйме sed --transform=EXPRESSIONперейменування файлів. Це навіть може перейменувати лише деякі файли. Наприклад:
% tar -cf - ./* |\
tar -C../test2 --transform='s/ABC\(.*[0-5]\)/DEF\1/' -xf -
% ls ../test2
> ABC.file6 ABC.file8 DEF.file1 DEF.file2 DEF.file4
> ABC.file7 ABC.file9 DEF.file10 DEF.file3 DEF.file5
Тож це одна перевага.
СТРАЙ
Також врахуйте, що це лише два tarпроцеси - і це не зміниться незалежно від кількості ваших файлів.
tar | tar
tarнастільки оптимізований, як ви могли б хотіти. Це ніколи не матиме підрахунку проблем або аргументованих дочірніх процесів. Це просто A> B зроблено.
АРГУМЕНТИ
Тут я використовую 7 різних аргументів, поєднаних між двома моїми tarпроцесами. Перший тут перерахований найважливіший:
-stdout / stdin - це повідомляє, tarщо він буде передавати або його вхід, або вихід на нього, або з stdin/stdoutякого він буде інтерпретувати правильно залежно від того, будує він чи витягує архів чи ні.
-ccreate - це говорить tarпро створення архіву. Наступний аргумент tarочікує:
-fФайл - ми вказуємо, що tarбуде працювати з fileоб'єктом, а не стрічковим пристроєм чи будь-яким іншим. А файл, з яким він буде працювати, як зазначалося вище, є stdin/stdout- іншими словами, наш |pipe.
./*всі $ PWD / файли - не надто багато для пояснення тут, за винятком того, що аргумент архіву приходить спочатку, тож -потім ./*.
... і з іншого боку |pipe...
-Cкаталог змін - це інформує, tarщо його потрібно змінити в вказаний я каталог перед виконанням будь-якої іншої дії, тому ефективно це безпосередньо cd ../test2перед вилученням.
--transform='s/ed/EXPR/'- як уже згадувалося, це перейменувало. Але документи вказують, що він може приймати будь-який sedвираз або //flag.
-xвитяг - після tarзмін у нашому цільовому каталозі та отримання наших інструкцій з перейменування ми доручаємо йому розпочати вилучення всіх файлів у його поточний каталог з -f - |pipeархівного файлу. Ніякої таємниці.
mcменеджер файлів має найбільш широку підтримку такого роду масових перейменовань.