tar Bunu gerçekten hızlı bir şekilde yapacağım.
ÖLÇEK
İlk önce 2 dizin ve 10 dosya oluşturdum:
% 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
Sonra onları kopyaladım:
% 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
DÖNÜŞÜMÜ
Bu yüzden GNU for adının yeniden adlandırılmasını tarkabul edecektir sed --transform=EXPRESSION. Bu sadece dosyaların bazılarını yeniden adlandırabilir. Örneğin:
% 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
Yani bu bir avantaj.
AKIŞ
Ayrıca bunun yalnızca iki tarişlem olduğunu ve dosya sayınızdan bağımsız olarak değişmeyeceğini de göz önünde bulundurun .
tar | tar
taristediğiniz gibi optimize edilmiştir. Bu asla sorun argüman sayımına veya kaçınılmaz çocuk işlemlerine sahip olmayacak. Bu sadece A> B yapıldı.
ARGÜMANLAR
tarBuradaki iki işlemim arasında 7 farklı argüman kullanıyorum . En önemlisi önce burada listelenmiştir:
-stdout / stdin - bu , bir arşiv oluşturup oluşturmadığına veya çıkarıp almadığına bağlı olarak tar, girdi veya çıktılarını stdin/stdoutdoğru şekilde yorumlayacağı ya da çıkacağı bilgisini verir.
-ccreate - bu tararşivi oluşturmayı söyler . Bir sonraki tartışma tarbekliyor ...
-fdosya - bunun bir teyp aygıtı yerine nesneyle ya da taronunla çalışacağını belirtiriz file. Ve üzerinde çalışacağı dosya, yukarıda belirtildiği gibi stdin/stdout- başka bir deyişle, bizim |pipe.
./*tüm $ PWD / files - arşiv argümanının önce gelmesi dışında burada açıklamak için fazla bir şey yok, o -zaman ./*.
... ve diğer tarafında |pipe...
-Cdizin değiştir - bu tar, başka bir işlem yapmadan önce belirttiğim dizine geçmesi gerektiğini, bu yüzden etkin bir şekilde bu dizinin cd ../test2çıkarılmasından hemen önce etkin olduğunu gösterir .
--transform='s/ed/EXPR/'- Daha önce de belirtildiği gibi, bu yeniden adlandırma yaptı. Ancak dokümanlar herhangi bir sedifade alabileceğini ya da ifade edebileceğini belirtir //flag.
-xözü - sonra tarhedef dizine değişiklikler ve bizim adlandırma talimat aldığı bunun talimat gelen bugünkü dizine tüm dosyaları ayıklanması başlamak için -f - |pipearşiv dosyası. Gizem yok.
mcdosya yöneticisi, bu tür toplu adlar için en kapsamlı desteğe sahiptir.