Réponses:
Utilisez simplement bash, pas besoin d'appeler des commandes externes.
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
Ne pas ajouter #!/bin/sh
Pour ceux qui ont besoin de cette doublure:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
? J'ai essayé à la fois de travailler avec / sans cette déclaration.
#!/bin/bash
. Cela dit, bash est normalement le shell par défaut sur de nombreux ordinateurs, vous ne trouverez donc pas beaucoup de différences: D Vous pouvez trouver plus d'informations ici
Essayez la rename
commande:
rename 's/_h.png/_half.png/' *.png
Mettre à jour:
exemple d'utilisation:
créer du contenu
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
solution d'essai:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
? qu'est-ce que rename ...
vous essayez?
rename
n'est pas un outil Unix standard.
brew install rename
's//'
- j'ai fait référence à l'homme et il y avait un simple synopsis rename [options] expression replacement file...
rename from util-linux 2.23.2
.
correspond à N'IMPORTE QUEL caractère, pas seulement un point - pour un point littéral, utilisez à la \.
place
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnew
par echo $fnew
comme deuxième ligne pour m'assurer que la sortie semble saine.
Êtes-vous à la recherche d'une solution pure bash? Il existe de nombreuses approches, mais en voici une.
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
Cela suppose que les seuls fichiers du répertoire en cours qui se terminent par _h.png
sont ceux que vous souhaitez renommer.
Beaucoup plus spécifiquement
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
En supposant que ces deux exemples sont les vôtres. des dossiers.
Pour le cas général, de renommer le fichier en a été couvert avant .
Utilisez l' rename
utilitaire écrit en perl. Peut-être que ce n'est pas disponible par défaut cependant ...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
J'ai eu une question similaire: dans le manuel, il décrit renommer comme
rename [option] expression replacement file
pour que vous puissiez l'utiliser de cette manière
rename _h _half *.png
Dans le code: «_h» est l'expression que vous recherchez. «_half» est le modèle par lequel vous souhaitez remplacer. '* .png' est la plage de fichiers que vous recherchez pour vos éventuels fichiers cibles.
J'espère que cela peut aider c:
Une autre approche peut être manuellement en utilisant l'option de changement de nom par lots
Faites un clic droit sur le fichier -> Commandes personnalisées de fichier -> Renommer par lots et vous pouvez remplacer h. avec la moitié.
Cela fonctionnera pour l'interface graphique basée sur Linux utilisant WinSCP, etc.
Utilisez l' rename
utilitaire:
rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
Bien que l' ensemble de réponses soit complet, je dois en ajouter un autre manquant.
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done