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
якого він буде інтерпретувати правильно залежно від того, будує він чи витягує архів чи ні.
-c
create - це говорить 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
менеджер файлів має найбільш широку підтримку такого роду масових перейменовань.