Wie gehe ich vor, mv original.filename new.original.filename
ohne den ursprünglichen Dateinamen erneut einzugeben?
Ich würde mir vorstellen, so etwas mv -p=new. original.filename
oder vielleicht mv original.filename new.~
oder was auch immer tun zu können - aber ich kann so etwas nicht sehen, nachdem ich mir man mv
/ info mv
pages angesehen habe.
Natürlich könnte ich dazu ein Shell-Skript schreiben, aber gibt es dafür keinen vorhandenen Befehl / Flag?
Sie können den folgenden
rename(1)
Befehl verwenden:Bearbeiten: Wenn
rename
es nicht verfügbar ist und Sie mehr als eine Datei umbenennen müssen, kann Shell-Scripting sehr kurz und einfach sein. Zum Beispiel können alle umbenennen ,*.jpg
umprefix_*.jpg
im aktuellen Verzeichnis:quelle
rename 's/(.*).example/$1/' *.example
rettete mich vor der Langeweile.$
in diesem Szenario brauchen . Also einfach's/(.*)/new.$1/'
rename
Der Befehl funktioniert auf meinem RHEL 6-Computer nicht. Gibt es verschiedene Versionen dieses Befehls? Dasfor ... done
hat bei mir funktioniert.Sie können eine Unix-kompatible Umbenennung mehrerer Dateien (mithilfe von Platzhaltern) erreichen, indem Sie eine for-Schleife erstellen:
quelle
${file%%}
machst du? Scheint ähnlich wie einfach $ {file}Ich habe Leute gesehen, die einen
rename
Befehl erwähnt haben, aber er ist auf Unix-Systemen nicht routinemäßig verfügbar (im Gegensatz zu Linux-Systemen oder Cygwin - auf beiden ist das Umbenennen eher eine ausführbare Datei als ein Skript). Diese Version vonrename
hat eine ziemlich eingeschränkte Funktionalität:Es ersetzt den from- Teil der Dateinamen durch den to , und das in der Manpage angegebene Beispiel lautet:
Dadurch wird foo1 in foo01 und foo10 in foo010 usw. umbenannt.
Ich verwende ein Perl-Skript namens
rename
, das ich ursprünglich aus der ersten Ausgabe des Camel-Buches um 1992 ausgegraben und dann erweitert habe, um Dateien umzubenennen.Auf diese Weise können Sie einen beliebigen Perl-Ersatz- oder Transliterationsbefehl schreiben, um Dateinamen zuzuordnen. In dem angeforderten Beispiel würden Sie Folgendes verwenden:
quelle
pacman
indem Sie Folgendes verwenden :pacman -Sy perl-rename
. Fügen Sie dann einen Alias in Ihrem Bashrc hinzu:alias rename='perl-rename'
'.html
an die Dateinamen verwenden,'s/$/.html/'
-tmp
von überall in den Dateinamen entfernen , verwenden's/tmp//g'
(tmp
überall suchen und durch nichts ersetzen).Der einfachste Weg, Dateien im Verzeichnis in großen Mengen umzubenennen, ist:
quelle
Wenn eine Änderung möglich ist, können Sie anstelle eines Präfixes ein Suffix verwenden. Dann können Sie die Tab-Vervollständigung verwenden, um den ursprünglichen Dateinamen abzurufen und das Suffix hinzuzufügen.
Andernfalls wird dies vom Befehl mv nicht unterstützt. Ein einfaches Shell-Skript könnte dies jedoch bewältigen.
quelle
In meinem Fall habe ich eine Gruppe von Dateien, die umbenannt werden müssen, bevor ich mit ihnen arbeiten kann. Jede Datei hat ihre eigene Rolle in der Gruppe und ein eigenes Muster.
Als Ergebnis habe ich eine Liste von Umbenennungsbefehlen wie folgt:
Versuchen Sie dies auch:
Dies erzeugt alle Kombinationen mit Präfixen und Suffixen:
Eine andere Möglichkeit, dasselbe Problem zu lösen, besteht darin, ein Zuordnungsarray zu erstellen und für jeden Dateityp ein entsprechendes Präfix hinzuzufügen, wie unten gezeigt:
quelle
Bulk-Skript zum Umbenennen von Dateien
quelle
Ich weiß, dass es hier gute Antworten gibt, aber ich habe beim Hinzufügen von Suffix keine Referenz gefunden, um Dateinamenerweiterungen zu behandeln.
Ich musste allen
wav
Dateien in einem Ordner vor der Dateierweiterung das Suffix '_en' hinzufügen .Die Magie ist hier:
%.*
for filename in *.wav; do mv $filename ${filename%.*}_en.wav; done;
Wenn Sie verschiedene Dateierweiterungen verarbeiten müssen, überprüfen Sie diese Antwort. Ein bisschen weniger intuitiv.
quelle