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 NAMEist fund unser WORDSsind alle Dateien im aktuellen Verzeichnis überein *.md. Die Variable $fwird 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 $fLeerzeichen enthalten kann. Ansonsten mvwürde ich denken, jedes Wort wäre eine eigene Datei. Wenn zum Beispiel keine Anführungszeichen vorhanden Foo Bar.mdwä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 $fvon Anführungszeichen macht es Sinn:
mv "Foo Bar.md" "test - Foo Bar.md"
Unter Berücksichtigung der Syntax von forkönnen Sie auch eine Teilmenge aller *.mdDateien 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