Einzeiler, der einfach direkt vom Terminal eingegeben werden kann:
for f in *.md; do mv "$f" "test - $f"; done
Oder in separaten Zeilen mit Semikolons umschreiben:
for f in *.md
do
mv "$f" "test - $f"
done
Exposition
Syntax von for
(in sh
):
for NAME [in WORDS ... ] ; do COMMANDS; done
Hier stimmen unser NAME
ist f
und unser WORDS
sind alle Dateien im aktuellen Verzeichnis überein *.md
. Die Variable $f
wird also durch jede übereinstimmende Datei ersetzt *.md
.
Also für a.md
:
mv "$f" "test - $f"
wird
mv "a.md" "test - a.md"
Die Anführungszeichen sind wichtig, da jeder Dateiname $f
Leerzeichen enthalten kann. Ansonsten mv
würde ich denken, jedes Wort wäre eine eigene Datei. Wenn zum Beispiel keine Anführungszeichen vorhanden Foo Bar.md
wären und eine Datei mit dem Namen vorhanden wäre , würde dies folgendermaßen übersetzt:
mv Foo Bar.md test - Foo Bar.md
das würde nicht so funktionieren wie beabsichtigt. Aber durch das Einschließen $f
von Anführungszeichen macht es Sinn:
mv "Foo Bar.md" "test - Foo Bar.md"
Unter Berücksichtigung der Syntax von for
können Sie auch eine Teilmenge aller *.md
Dateien umbenennen, indem Sie jede explizit benennen:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Oder mit Shell-Erweiterung:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done
Wenn Sie haben
prename
...Verwenden gewöhnlicher Shell-Befehle:
quelle
prename
?sudo apt-get install
?mmv
1 , 2 ist auch ein sehr schönes Werkzeug für eine solche Aufgabe, angewendet auf den aktuellen Job, wäre esNatürlich, wenn Sie nur "test -" zu a.md, b.md und c.md hinzufügen möchten, aber nicht a1.md, so etwas wie
wäre angemessener.
Ich kann es wirklich empfehlen, besonders wenn Sie viele solche Probleme haben.
Wenn Sie zusätzlich nach einer grafischen Oberfläche suchen, versuchen Sie es mit gprename .
quelle
Anstatt eine for-Schleife zu verwenden, die bei Leerzeichen fehlschlägt, sofern Sie die IFS-Variable nicht neu definieren, würde ich die Verwendung einer while-Schleife in Kombination mit find empfehlen. Das Folgende funktioniert, wenn es im selben Verzeichnis wie die Dateien ausgeführt wird
Die Zeile "basename" befindet sich dort, sodass find nur den Dateinamen ausgibt - ohne Pfadkomponenten, die den Umbenennungsvorgang unterbrechen würden.
quelle
Ich weiß, dass es sehr spät ist, aber wenn jemand anderes so etwas sucht, dann hat das bei mir funktioniert:
quelle
Wenn Sie
zsh
verfügbar sind, können Sie Folgendes verwendenzmv
:Sie können den Befehl testen mit:
-n
bedeutet Trockenlauf, dh nur zeigen, was passieren wird.-w
Platzhalter werden implizit in Klammern gesetzt, und Rückverweise funktionieren.quelle
Fügen Sie in bash allen Dateien im Ordner "Text voranstellen -" hinzu:
quelle
for i in *; do mv "$i$" "Prepend text - $i"; done