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 NAME
is f
e our WORDS
sono tutti i file nella corrispondenza della directory corrente *.md
. Quindi la variabile $f
verrà 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 $f
potrebbe contenere spazi. Altrimenti mv
penserei 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 $f
virgolette, ha senso:
mv "Foo Bar.md" "test - Foo Bar.md"
Notando la sintassi di for
, puoi anche rinominare un sottoinsieme di tutti i *.md
file 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