tar Das erledige ich sehr schnell für Sie.
PRÜFUNG
Zuerst habe ich 2 Verzeichnisse und 10 Dateien erstellt:
% 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
Dann habe ich sie kopiert:
% 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
VERWANDELN
Also wird GNU tarein sed --transform=EXPRESSIONzum Umbenennen von Dateien akzeptieren . Dies kann sogar nur einige der Dateien umbenennen. Zum Beispiel:
% 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
Das ist also ein Vorteil.
STROM
Bedenken Sie auch, dass dies nur zwei tarProzesse sind - und dass sich dies unabhängig von der Anzahl Ihrer Dateien nicht ändert.
tar | tar
tarist so optimiert, wie Sie es sich wünschen könnten. Dies wird niemals problematische Argumente oder außer Kontrolle geratene untergeordnete Prozesse haben. Dies ist nur A> B erledigt.
ARGUMENTE
Ich benutze hier 7 verschiedene Argumente, die zwischen meinen beiden tarProzessen kombiniert sind. Das wichtigste ist hier zuerst aufgeführt:
-stdout / stdin - Dies informiert, tardass es entweder seine Eingabe oder Ausgabe streamen wird, zu oder von stdin/stdoutder es richtig interpretiert wird, abhängig davon, ob es ein Archiv erstellt oder extrahiert.
-ccreate - tarhiermit wird das Archiv erstellt. Das nächste tarerwartete Argument ist ...
-ffile - wir geben an, dass tarmit einem fileObjekt gearbeitet wird und nicht mit einem Bandgerät oder was auch immer. Und die Datei, mit der es arbeiten wird, ist stdin/stdout- mit anderen Worten - unsere |pipe.
./*alle $ PWD / -Dateien - hier nicht zu viel zu erklären, außer dass das Archivierungsargument an erster Stelle steht, also -dann ./*.
... und auf der anderen Seite des |pipe...
-Cchange directory ( Verzeichnis wechseln) - Hiermit wird mitgeteilt, tardass das von mir angegebene Verzeichnis geändert werden muss, bevor eine andere Aktion ausgeführt wird, und zwar direkt cd ../test2vor dem Extrahieren.
--transform='s/ed/EXPR/'- Wie bereits erwähnt, wurde dies umbenannt. Aber die Dokumente zeigen an, dass es einen beliebigen sedAusdruck oder annehmen kann //flag.
-xExtrahieren - Nach tarÄnderungen in unserem Zielverzeichnis und dem Erhalt unserer Umbenennungsanweisungen weisen wir es an, alle Dateien aus der -f - |pipeArchivdatei in sein aktuelles Verzeichnis zu extrahieren . Kein Rätsel.
mcDateimanager bietet eine umfassende Unterstützung für diese Art von Massenumbenennungen.