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 tarakan menerima sed --transform=EXPRESSIONpenggantian 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 tarproses - dan itu tidak akan berubah terlepas dari jumlah file Anda.
tar | tar
tardioptimalkan 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 tarproses saya di sini. Yang paling penting tercantum di sini terlebih dahulu:
-stdout / stdin - ini menginformasikan tarbahwa itu akan streaming baik input atau output ke atau dari stdin/stdoutmana ia akan menafsirkan dengan benar tergantung pada apakah itu membangun atau mengekstraksi arsip.
-cbuat - ini memberitahu taruntuk membangun arsip. Argumen berikutnya tarmengharapkan ...
-ffile - kami menentukan bahwa tarakan bekerja dengan fileobjek 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...
-Cubah direktori - ini menginformasikan tarbahwa perlu mengubah ke direktori yang saya tentukan sebelum melakukan tindakan lain, sehingga efektif cd ../test2sebelum ekstraksi.
--transform='s/ed/EXPR/'- Seperti yang telah disebutkan, ini mengganti nama. Tetapi dokumen menunjukkan bahwa itu dapat mengambil sedekspresi apa pun atau //flag.
-xekstrak - setelah tarperubahan ke direktori target kami dan menerima instruksi penggantian nama kami, kami menginstruksikannya untuk mulai mengekstraksi semua file ke direktori saat ini dari -f - |pipefile arsip. Tidak ada misteri.
mcManajer file yang terhormat memiliki dukungan paling luas untuk jenis penggantian nama massal ini.