Une commande qui peut être facilement tapée directement depuis le terminal :
for f in *.md; do mv "$f" "test - $f"; done
Ou réécrite sur des lignes séparées au lieu d'utiliser 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, notre NAME
est f
et nos WORDS
sont tous les fichiers dans le répertoire actuel correspondant à *.md
. Ainsi, la variable $f
sera substituée par chaque fichier correspondant à *.md
.
Ainsi 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
penserait que chaque mot est un fichier séparé. Par exemple, s'il n'y avait pas de guillemets et qu'il y avait un fichier appelé Foo Bar.md
, cela se traduirait par :
mv Foo Bar.md test - Foo Bar.md
ce 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"
Notant la syntaxe de for
, vous pourriez également renommer un sous-ensemble de tous les fichiers *.md
en les nommant explicitement :
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
Ou en utilisant l'expansion du shell :
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done