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ı tar
kabul 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 tar
işlem olduğunu ve dosya sayınızdan bağımsız olarak değişmeyeceğini de göz önünde bulundurun .
tar | tar
tar
istediğ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
tar
Buradaki 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/stdout
doğru şekilde yorumlayacağı ya da çıkacağı bilgisini verir.
-c
create - bu tar
arşivi oluşturmayı söyler . Bir sonraki tartışma tar
bekliyor ...
-f
dosya - bunun bir teyp aygıtı yerine nesneyle ya da tar
onunla ç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
...
-C
dizin 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 sed
ifade alabileceğini ya da ifade edebileceğini belirtir //flag
.
-x
özü - sonra tar
hedef 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 - |pipe
arşiv dosyası. Gizem yok.
mc
dosya yöneticisi, bu tür toplu adlar için en kapsamlı desteğe sahiptir.