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