renommage de fichier
renommage de fichier
je cherche un moyen rapide de renommer un ensemble de fichier :
ex :
renommé ces fichier:
sa25 sa27 sa29 sa31 sar25 sar27 sar29 sar31
sa24 sa26 sa28 sa30 sar24 sar26 sar28 sar30
en fichier :
sa.2008_01_31 pour sa31
sa.2008_01_25 pour sa25 etc*
merci pour votre aide
ex :
renommé ces fichier:
sa25 sa27 sa29 sa31 sar25 sar27 sar29 sar31
sa24 sa26 sa28 sa30 sar24 sar26 sar28 sar30
en fichier :
sa.2008_01_31 pour sa31
sa.2008_01_25 pour sa25 etc*
merci pour votre aide
- marc[i1]
- Maître du Kyudo
- Messages : 1753
- Inscription : ven. 27 oct. 2006, 10:48
- Localisation : Nantes (44)
Salut,
tu as fait un essai avec for et cut ?
Enfin, c'est une piste !
Tu peux aussi jouer avec if pour le cas de sa ou sar
tu as fait un essai avec for et cut ?
Code : Tout sélectionner
for i in * ; do
prefix=$(ls $i | cut -d 'r' -f1)
nombre=$(ls $i | cut -d 'r' -f2)
cp $1 ${prefix}.2008_01_${nombre}
done
Tu peux aussi jouer avec if pour le cas de sa ou sar
Ne vous emmerdez plus, emmerdez les autres.
-
- Chu Ko Nu
- Messages : 405
- Inscription : lun. 18 sept. 2006, 16:21
- Localisation : france, yvelines 78
je te déconseille vivement de decommenter la ligne 'mv...' avant que tout ne soit pas nickel..
Code : Tout sélectionner
#!/bin/bash
script_dir=`pwd`
script_name=$0
script_name=${script_name##*/}
echo $script_name
for nom_fichier in `ls`
do
if [ "$nom_fichier" == "." ]
then
echo -n ''
elif [ "$nom_fichier" == ".." ]
then
echo -n ''
elif [ "$nom_fichier" == "$script_name" ]
then
echo -n ''
else
nom=${nom_fichier%[0-9]*}
numero=${nom_fichier#$nom}
nouvo_nom=$nom".2008_01_"$numero
#ligne ci-dessous pour faire une eventuelle mise au point, sert a rien
echo "$nouvo_nom"
#ligne ci-dessous a decommenter quand mise au point faite
#mv $nom_fichier $nouvo_nom
fi
done
Dernière modification par _alexmyself le ven. 01 févr. 2008, 14:02, modifié 1 fois.
-
- Maître du Kyudo
- Messages : 2073
- Inscription : sam. 16 sept. 2006, 10:39
- Localisation : 31 - Toulouse Nord
tu as aussi la commande rename, qui ne modifie pas les attributs de date des fichiers !
En une seule commande :
man rename pour mieux comprendre !
EDIT : bon, j'explique la commande : on remplace sa par sa.2008_01_ pour tous les fichiers sa* du répertoire !
En une seule commande :
Code : Tout sélectionner
$ rename sa sa.2008_01_ sa*
EDIT : bon, j'explique la commande : on remplace sa par sa.2008_01_ pour tous les fichiers sa* du répertoire !
- gyo
- Maître du Kyudo
- Messages : 1049
- Inscription : jeu. 19 avr. 2007, 10:40
- Localisation : Nantes (44)
un ptit ouhanelaïneur en sh :
[EDIT]
et hop, tes fichiers seront renommés!
Code : Tout sélectionner
for f in sa*; do basename=${f%%[0-9]*}; number=${f#$basename}; echo "mv $f $basename.2008_01_$number"; done
si tu utilises mon script ci-dessus, tu le copies/colles sur la ligne de commande et tu l'exécute dans le répertoire comprenant tes fichiers. Ce scrip ne fais qu'afficher la commande à exécuter pour renommer, si ça correspond à tes attentes, tu retire le echo et les guillemets autour du mv -> ça donne ça :djaac a écrit : super merci bcp,
donc si je dois modifier ts mes fichiers sa25 sa26 etc en sa.2008_01[25-26 etc]
commen faire dans le script *?
desole mais j'ai du mal avec les script
merci encore
Code : Tout sélectionner
for f in sa*; do basename=${f%%[0-9]*}; number=${f#$basename}; mv $f $basename.2008_01_$number; done
Dernière modification par gyo le ven. 01 févr. 2008, 14:23, modifié 1 fois.
-
- Chu Ko Nu
- Messages : 405
- Inscription : lun. 18 sept. 2006, 16:21
- Localisation : france, yvelines 78
Comment faites vous pour vivre sans zsh ?
Accéssoirement, thunar a un outil de rename de masse qui fait la même chose pour ceux qui veulent du graphique.
Code : Tout sélectionner
zmv 'sa(*)' 'sa.2008_01_$1'
- vincentxavier
- Elfe
- Messages : 778
- Inscription : ven. 11 août 2006, 18:17
- Localisation : Epinay sur Seine (93)
Hum, perso avant de regarder zsh, j'essaie déjà de voir en quoi bash est limité pour mes besoins, et pour l'instant, je n'ai pas encore trouvé mes limites.bapt a écrit :Comment faites vous pour vivre sans zsh ?
Accéssoirement, thunar a un outil de rename de masse qui fait la même chose pour ceux qui veulent du graphique.Code : Tout sélectionner
zmv 'sa(*)' 'sa.2008_01_$1'
D'autre part, à part te la jouer, je vois pas l'interêt de donner un exemple avec zsh là où l'utilisateur utilise clairement le shell par défaut de Arch, c'est à dire Bash. À la limite tu aurais donné un exemple avec un shell comme ksh ou sh qui se limite à la norme POSIX que cela aurait été plus compréhensible.
Warranty
THIS ADVICE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
En clair, je ne pourrais être tenu responsable des dégats causés par l'utilisation de mes conseils
THIS ADVICE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
En clair, je ne pourrais être tenu responsable des dégats causés par l'utilisation de mes conseils
- wain
- Maître du Kyudo
- Messages : 1854
- Inscription : ven. 11 août 2006, 19:15
- Localisation : Nancy (54)
Moi je trouve intéressante la remarque de bapt. Ca montre à tous combient un truc à priori compliqué en bash peut s'avérer simple lorsqu'on a le bon outil. A force d'autres passerons peut-être à zsh.
Presque tout le monde est parti bille en tête sur une solution en bash alors qu'elle serait peut-être plus simple et tout aussi accessible en perl, python ou zsh. Si nous linuxiens acharnés ne promouvons pas la diversité, qui le fera ?
Presque tout le monde est parti bille en tête sur une solution en bash alors qu'elle serait peut-être plus simple et tout aussi accessible en perl, python ou zsh. Si nous linuxiens acharnés ne promouvons pas la diversité, qui le fera ?
s/pacman/yaourt/g c'est ARCHi clair ! => http://archlinux.fr/
- mélodie
- Maître du Kyudo
- Messages : 2784
- Inscription : lun. 30 oct. 2006, 02:06
- Localisation : Pyrénées
+1wain a écrit :(...)perl, python ou zsh. Si nous linuxiens acharnés ne promouvons pas la diversité, qui le fera ?
Je ne connais toujours rien au shell, mais ne peux m'empêcher de voir que la commande zsh est ultra-courte (et compréhensible à mes yeux de néophyte) par rapport aux autres solutions proposées.
Vive la diversité !
- vincentxavier
- Elfe
- Messages : 778
- Inscription : ven. 11 août 2006, 18:17
- Localisation : Epinay sur Seine (93)
L'exemple nécessite d'utiliser zsh et la fonction zmv, qui ne sont ni POSIX, ni même dans les extensions GNU. Il s'agit là d'extensions propres à zsh.djaac a écrit :bapt,
si je comprend bien ,
pour mon exemple, si je dois enommer ts le fichiers sa1 sa2 sa36, je tape :
zmv 'sa(*)' 'sa.2008_01_$1'
mais $1 correspond à quoi, peux tu me faire avec exemple concret stp.
merci
Pour le commenter, disons que le (*) permet de stocker la partie située après 'sa' dans la variable $1. Par exemple,
Code : Tout sélectionner
zmv '(sa)(*)' '200801$1\ $2'
Il existe quantité de méthode pour faire ce que tu veux. Personnellement, je ferais
Code : Tout sélectionner
for i in sa* ; do mv $i `echo $i | sed -e 's/([0-9]*)/.2008_01_\1/' ` ; done ;
Warranty
THIS ADVICE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
En clair, je ne pourrais être tenu responsable des dégats causés par l'utilisation de mes conseils
THIS ADVICE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
En clair, je ne pourrais être tenu responsable des dégats causés par l'utilisation de mes conseils
-
- Maître du Kyudo
- Messages : 2073
- Inscription : sam. 16 sept. 2006, 10:39
- Localisation : 31 - Toulouse Nord
moi, je veux bien découvrir tout plein de solutions... mais à quoi bon se compliquer la tâche lorsqu'une commande simple existe déjà ?
Pourquoi ne pas réécrire dans ce cas toutes les commandes en script zsh ?
ok, je caricature, mais bon, j'avoue être surpris de la réaction de djaac... (et pas des autres pour les propositions zsh & co !)
Pourquoi ne pas réécrire dans ce cas toutes les commandes en script zsh ?
ok, je caricature, mais bon, j'avoue être surpris de la réaction de djaac... (et pas des autres pour les propositions zsh & co !)
- wain
- Maître du Kyudo
- Messages : 1854
- Inscription : ven. 11 août 2006, 19:15
- Localisation : Nancy (54)
Si on se limite au shell par défaut présent dans Archlinux (bash), autant utiliser ses fonctions de substitution au lieu de faire appel à un xième outil externe (sed):vincentxavier a écrit :Il existe quantité de méthode pour faire ce que tu veux. Personnellement, je feraisCode : Tout sélectionner
for i in sa* ; do mv $i `echo $i | sed -e 's/([0-9]*)/.2008_01_\1/' ` ; done ;
Code : Tout sélectionner
for i in sa*; do mv $i ${i/sa/sa.2008_01_}; done
s/pacman/yaourt/g c'est ARCHi clair ! => http://archlinux.fr/
- vincentxavier
- Elfe
- Messages : 778
- Inscription : ven. 11 août 2006, 18:17
- Localisation : Epinay sur Seine (93)
Le problème là est de pouvoir "catcher" une partie de l'expression régulière pour la réutiliser !
Warranty
THIS ADVICE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
En clair, je ne pourrais être tenu responsable des dégats causés par l'utilisation de mes conseils
THIS ADVICE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
En clair, je ne pourrais être tenu responsable des dégats causés par l'utilisation de mes conseils