One-liner che può essere facilmente digitato direttamente dal terminale:
for f in *.md; do mv "$f" "test - $f"; done
O riscritto su righe separate usando invece i punti e virgola:
for f in *.md
do
mv "$f" "test - $f"
done
Esposizione
Sintassi di for(in sh):
for NAME [in WORDS ... ] ; do COMMANDS; done
Qui, our NAMEis fe our WORDSsono tutti i file nella corrispondenza della directory corrente *.md. Quindi la variabile $fverrà sostituita con ogni corrispondenza del file *.md.
Quindi per a.md:
mv "$f" "test - $f"
diventa
mv "a.md" "test - a.md"
Le virgolette sono importanti perché ogni nome file $fpotrebbe contenere spazi. Altrimenti mvpenserei che ogni parola fosse un file separato. Ad esempio, se non c'erano virgolette e c'era un file chiamato Foo Bar.md, si tradurrebbe in:
mv Foo Bar.md test - Foo Bar.md
che non funzionerebbe come previsto. Ma racchiudendo le $fvirgolette, ha senso:
mv "Foo Bar.md" "test - Foo Bar.md"
Notando la sintassi di for, puoi anche rinominare un sottoinsieme di tutti i *.mdfile nominandoli esplicitamente:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
O usando l'espansione della shell:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done