tar
akan melakukan ini untuk Anda sangat cepat.
UJI
Pertama saya membuat 2 direktori dan 10 file:
% 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
Lalu saya menyalinnya:
% 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
MENGUBAH
Jadi GNU tar
akan menerima sed --transform=EXPRESSION
penggantian nama file. Ini bahkan dapat mengganti nama hanya beberapa file. Contohnya:
% 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
Jadi itu satu keuntungan.
ALIRAN
Juga pertimbangkan bahwa ini hanya dua tar
proses - dan itu tidak akan berubah terlepas dari jumlah file Anda.
tar | tar
tar
dioptimalkan seperti yang Anda inginkan. Ini tidak akan pernah memiliki jumlah argumen masalah atau proses anak kabur. Ini hanya A> B selesai.
ARGUMEN
Saya menggunakan 7 argumen berbeda yang digabungkan antara dua tar
proses saya di sini. Yang paling penting tercantum di sini terlebih dahulu:
-
stdout / stdin - ini menginformasikan tar
bahwa itu akan streaming baik input atau output ke atau dari stdin/stdout
mana ia akan menafsirkan dengan benar tergantung pada apakah itu membangun atau mengekstraksi arsip.
-c
buat - ini memberitahu tar
untuk membangun arsip. Argumen berikutnya tar
mengharapkan ...
-f
file - kami menentukan bahwa tar
akan bekerja dengan file
objek daripada perangkat tape atau apa pun. Dan file yang akan dikerjakannya, seperti disebutkan di atas, adalah stdin/stdout
- dengan kata lain, file kita |pipe
.
./*
semua $ PWD / file - tidak terlalu banyak untuk menjelaskan di sini kecuali bahwa argumen arsip datang pertama, sehingga -
kemudian ./*
.
... dan di sisi lain |pipe
...
-C
ubah direktori - ini menginformasikan tar
bahwa perlu mengubah ke direktori yang saya tentukan sebelum melakukan tindakan lain, sehingga efektif cd ../test2
sebelum ekstraksi.
--transform='s/ed/EXPR/'
- Seperti yang telah disebutkan, ini mengganti nama. Tetapi dokumen menunjukkan bahwa itu dapat mengambil sed
ekspresi apa pun atau //flag
.
-x
ekstrak - setelah tar
perubahan ke direktori target kami dan menerima instruksi penggantian nama kami, kami menginstruksikannya untuk mulai mengekstraksi semua file ke direktori saat ini dari -f - |pipe
file arsip. Tidak ada misteri.
mc
Manajer file yang terhormat memiliki dukungan paling luas untuk jenis penggantian nama massal ini.