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 tar
ein sed --transform=EXPRESSION
zum 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 tar
Prozesse sind - und dass sich dies unabhängig von der Anzahl Ihrer Dateien nicht ändert.
tar | tar
tar
ist 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 tar
Prozessen kombiniert sind. Das wichtigste ist hier zuerst aufgeführt:
-
stdout / stdin - Dies informiert, tar
dass es entweder seine Eingabe oder Ausgabe streamen wird, zu oder von stdin/stdout
der es richtig interpretiert wird, abhängig davon, ob es ein Archiv erstellt oder extrahiert.
-c
create - tar
hiermit wird das Archiv erstellt. Das nächste tar
erwartete Argument ist ...
-f
file - wir geben an, dass tar
mit einem file
Objekt 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
...
-C
change directory ( Verzeichnis wechseln) - Hiermit wird mitgeteilt, tar
dass das von mir angegebene Verzeichnis geändert werden muss, bevor eine andere Aktion ausgeführt wird, und zwar direkt cd ../test2
vor dem Extrahieren.
--transform='s/ed/EXPR/'
- Wie bereits erwähnt, wurde dies umbenannt. Aber die Dokumente zeigen an, dass es einen beliebigen sed
Ausdruck oder annehmen kann //flag
.
-x
Extrahieren - Nach tar
Änderungen in unserem Zielverzeichnis und dem Erhalt unserer Umbenennungsanweisungen weisen wir es an, alle Dateien aus der -f - |pipe
Archivdatei in sein aktuelles Verzeichnis zu extrahieren . Kein Rätsel.
mc
Dateimanager bietet eine umfassende Unterstützung für diese Art von Massenumbenennungen.