tar lo farà per te molto velocemente.
TEST
Per prima cosa ho creato 2 directory e 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
Poi le ho copiate:
% 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
TRASFORMARE
Quindi GNU taraccetterà un sed --transform=EXPRESSIONper rinominare i file. Questo può anche rinominare solo alcuni dei file. Per esempio:
% 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
Quindi questo è un vantaggio.
STREAM
Considera anche che si tratta solo di due tarprocessi e che non cambierà indipendentemente dal conteggio dei file.
tar | tar
tarè ottimizzato come si potrebbe desiderare. Ciò non avrà mai conteggi di argomenti problematici o processi figlio in fuga. Questo è solo A> B. fatto.
ARGOMENTI
Uso 7 argomenti distinti combinati tra i miei due tarprocessi qui. Quello più importante è elencato qui prima:
-stdout / stdin - questo informa tarche eseguirà lo streaming del suo input o output verso o dal stdin/stdoutquale interpreterà correttamente a seconda che stia costruendo o estraendo o meno un archivio.
-ccrea - questo dice tardi costruire l'archivio. Il prossimo argomento tarprevede che ...
-ffile : specifichiamo che tarfunzionerà con un fileoggetto anziché con un dispositivo a nastro o altro. E il file con cui lavorerà, come notato sopra, è stdin/stdout- in altre parole, il nostro |pipe.
./*tutti i $ PWD / file - non c'è molto da spiegare qui, tranne per il fatto che l'argomento di archivio viene prima, -quindi ./*.
... e dall'altra parte del |pipe...
-Ccambia directory : informa tarche deve passare alla directory specificata prima di eseguire qualsiasi altra azione, in modo efficace appena cd ../test2prima dell'estrazione.
--transform='s/ed/EXPR/'- come già accennato, ciò ha comportato la ridenominazione. Ma i documenti indicano che può prendere qualsiasi sedespressione o //flag.
-xextract - dopo aver tarapportato modifiche alla nostra directory di destinazione e riceve le nostre istruzioni di ridenominazione, le chiediamo di iniziare a estrarre tutti i file nella sua directory corrente dal -f - |pipefile di archivio. Nessun mistero.
mcgestore di file ha un supporto molto esteso per questo tipo di rinominazioni di massa.