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 NAME
est - f
et nos WORDS
sont tous les fichiers du répertoire correspondant en cours *.md
. Donc, la variable $f
sera 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 $f
peut contenir des espaces. Sinon, mv
je 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 $f
entre 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 *.md
fichiers 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