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
Si vous avez
prename
...Utiliser des commandes shell ordinaires:
la source
prename
?sudo apt-get install
)?mmv
1 , 2 est également un très bon outil pour une telle tâche, appliquée au travail en cours, il seraitBien sûr, si vous voulez seulement ajouter "test -" à a.md, b.md et c.md, mais pas a1.md, quelque chose comme
serait plus approprié.
Je peux vraiment le suggérer, surtout si vous avez beaucoup de problèmes de ce type.
Si vous recherchez en outre une interface graphique, essayez gprename .
la source
Au lieu d'utiliser une boucle for, qui échouera sur les espaces sauf si vous redéfinissez la variable IFS, je vous recommande d'utiliser une boucle while combinée à find. Ce qui suit fonctionnera s’il est exécuté à partir du même répertoire que les fichiers
la ligne "nom_base" est là pour que find affiche uniquement le nom du fichier - sans les composants de chemin qui feraient interrompre l'opération de changement de nom.
la source
Je sais qu'il est vraiment tard, mais si quelqu'un d'autre cherche quelque chose comme ça, alors cela a fonctionné pour moi:
la source
Si vous en avez,
zsh
vous pouvez utiliserzmv
:Vous pouvez tester la commande avec:
-n
signifie run-dry, c'est à dire montrer seulement ce qui va se passer.-w
met implicitement des parenthèses autour des caractères génériques, fait en sorte que les références arrière fonctionnent.la source
En bash, ajouter "Prepend text -" à tous les fichiers du dossier:
la source
for i in *; do mv "$i$" "Prepend text - $i"; done