Ich habe einen Ordner mit einer Reihe von Dateien in ABC. * (Es gibt ungefähr 100 solcher Dateien). Ich möchte sie alle in neue Dateien kopieren, deren Namen mit DEF beginnen. *
Also will ich
ABC.Page1
ABC.Page2
ABC.Topic12
...etc
kopiert nach
DEF.Page1
DEF.Page2
DEF.Topic12
...etc
Was ist der einfachste Weg, dies mit einem Batch-Befehl (in BASH oder ähnlichem) zu tun? Ich denke an etwas mit sed oder awk oder xargs, aber ich habe Schwierigkeiten, die Syntax herauszufinden. Ich könnte ein Python-Skript schreiben, aber ich denke, es gibt wahrscheinlich eine Befehlszeilenlösung, die nicht zu kompliziert ist.
mc
Dateimanager bietet eine umfassende Unterstützung für diese Art von Massenumbenennungen.tar
ist auch kein Frühlingshuhn. Siehe meine Antwort für ein Beispiel.Antworten:
Wie wäre es mit so etwas in bash:
Sie können es testen, indem Sie echo vor den Befehl cp stellen:
quelle
cp /usr/local/lib/libboost* /usr/local/lib/libboost*
mit dem Echo Check.Um dies effizient mit einer großen Anzahl von Dateien zu tun, ist es besser, zu vermeiden
cp
, dass für jede Datei ein anderer Prozess gestartet wird. Eine Möglichkeit wäre, sie mit zu kopieren und dann umzubenennenprename
(rename
ist in Debian-basierten Distributionen standardmäßig damit verbunden). Verwendung dieses und des Linuxmktemp
:Aktualisieren
Eigentlich
pax
könnte es ein besserer Weg sein, hierher zu kommen:Obwohl
pax
es sich sowohl um POSIX als auch um Linux Standard Base handelt, wird es derzeit nur von wenigen Distributionen standardmäßig unterstützt.quelle
tar
Das erledige ich sehr schnell für Sie.PRÜFUNG
Zuerst habe ich 2 Verzeichnisse und 10 Dateien erstellt:
Dann habe ich sie kopiert:
VERWANDELN
Also wird GNU
tar
einsed --transform=EXPRESSION
zum Umbenennen von Dateien akzeptieren . Dies kann sogar nur einige der Dateien umbenennen. Zum Beispiel: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
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:... und auf der anderen Seite des
|pipe
...quelle
pax
Lösung für diese Frage. Ich würde es meiner Antwort hinzufügen, aber ich denke, es ist hier besser geeignet -pax -rws '/^ABC/DEF/' ABC.* .
pax
ist POSIX angegeben - daher derpax
.pax
kann POSIX sein, wird aber leider nur selten standardmäßig installiert.Wenn es Ihnen nichts ausmacht, ein weniger standardmäßiges Tool zu verwenden, empfehle ich die Verwendung von mmv (Mass Move), das für diese Art von Aufgaben geschrieben wurde. Mit
mcp
(Massenkopie), die Teil der Suite ist, könnten Sie einfach tunEs ist nicht ganz einfach, Download-Pakete zu finden. Das aktuelle Debian-Paket (das Arch auch in AUR verwendet), um es zu Hause zu kompilieren, finden Sie hier .
quelle
apt-get install mmv
Fügen Sie in zsh die folgenden Zeilen ein
.zshrc
:Dann können Sie in der Befehlszeile ausführen
oder einfach
In einer anderen Shell, solange Sie zsh installiert haben:
quelle
Sie könnten dies tun:
quelle
"${i#*.}"
bisschen lesen ?Sie könnten dies tun: http://www.projectik.eu/index.php/programovanie/linux/item/243-linux-kopirovanie-suborov-vo-vlakne Hier ist ein Beispiel
quelle