Une ligne qui peut être facilement saisie directement depuis le terminal:
for f in *.md; do mv "$f" "test - $f"; done
Ou réécrit sur des lignes séparées à la place en utilisant des points-virgules:
for f in *.md
do
mv "$f" "test - $f"
done
Exposition
Syntaxe de for(en sh):
for NAME [in WORDS ... ] ; do COMMANDS; done
Ici, nos NAMEest - fet nos WORDSsont tous les fichiers du répertoire correspondant en cours *.md. Donc, la variable $fsera substituée à chaque fichier correspondant *.md.
Donc pour a.md:
mv "$f" "test - $f"
devient
mv "a.md" "test - a.md"
Les guillemets sont importants car chaque nom de fichier $fpeut contenir des espaces. Sinon, mvje penserais que chaque mot est un fichier séparé. Par exemple, s'il n'y avait pas de guillemets et qu'un fichier est appelé Foo Bar.md, il se traduirait par:
mv Foo Bar.md test - Foo Bar.md
qui ne fonctionnerait pas comme prévu. Mais en mettant $fentre guillemets, cela a du sens:
mv "Foo Bar.md" "test - Foo Bar.md"
En notant la syntaxe de for, vous pouvez également renommer un sous-ensemble de tous les *.mdfichiers en les nommant explicitement:
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Ou en utilisant une expansion de shell:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done