web-dev-qa-db-fra.com

Renommez tous les fichiers du répertoire de $ filename_h en $ filename_half?

Mort simple.

Comment puis-je renommer 

05_h.png
06_h.png

à 

05_half.png
06_half.png

Au moins, je pense que c'est simple, mais il est difficile de Google pour ce genre de chose à moins que vous ne le sachiez déjà. 

Merci....

106
Richard

Il suffit d'utiliser 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 ligne:

for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
234
bash-o-logist

Essayez la commande rename:

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 de test:

$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png  three_half.png  two_half.png
47
Michał Šrajer
for f in *.png; do
  fnew=`echo $f | sed 's/_h.png/_half.png/'`
  mv $f $fnew
done
9
Karoly Horvath

Vous cherchez une solution pure bash? Il y a beaucoup d'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 se terminant 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 votre seul. des dossiers.

Pour le cas général, le fichier renommé dans aétéest couvertavant .

8
Sorpigal

Utilisez l'utilitaire rename écrit en Perl . Peut-être qu'il n'est pas disponible par défaut si ...

$ 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
4
Fredrik Pihl

J'avais une question similaire: Dans le manuel, il est décrit renommer en

rename [option] expression replacement file

afin que vous puissiez l'utiliser de cette façon 

rename _h _half *.png

Dans le code: '_ h 'est l'expression que vous recherchez. '_ half 'est le motif que vous voulez remplacer. '*. png' est la plage de fichiers que vous recherchez pour vos fichiers cibles possibles. 

J'espère que cela peut aider c:

2
James Yen
for i in *_h.png ; do
  mv $i `echo "$i"|awk -F'.' '{print $1"alf."$2}'`
done
2
ztank1013

Une autre approche peut être manuelle en utilisant l'option de renommage par lots 

Faites un clic droit sur le fichier -> Fichier Commandes personnalisées -> Renommer par lots .__ et vous pourrez remplacer h. à moitié. 

Cela fonctionnera pour le gui basé sur Linux utilisant WinSCP, etc.

1
Easwar

Bon mot:
for file in *.php ; do mv "$file" "_$file" ; done

0
Jadeye

Utilisez l'utilitaire rename:

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
0
C. Ramseyer