Renommer un lot de fichiers [Résolu/Fermé]

Signaler
-
 zeunixnewbie -
Bonjour,


Je dois renommer un grand nombre de fichiers dont le nom est de la forme:
toto_20080816.titi
en
200808_toto.titi

Je pensais utiliser du sed mais je sèche lamentablement sur la méthode.
Un point essentiel: étant sous AIX 5, je n'ai pas d'option -s dispo avec sed...

Si l'un de vous a une idée, je suis preneur.

Merci d'avance !

5 réponses


Clap clap.

Z'êtes forts !

Bravo pour le sed. Il va falloir que je me penche bien dessus pour comprendre tous les caractères de substitution.
Un point de détail tout de même, je ne souhaite récupérer que les 6 premiers caractères de la date.

toto_20080816.titi
en
200808_toto.titi

Une idée ?

Snif snif...

Je pleure tellement c'est beau !

Bon, sinon, sans rire, merci pour le lien, c'est exactement ce que je cherchais et merci pour la commande: ça marche nickel.
Promis, ma prochaine question sera postée avec mon nouveau pseudo: zeunixmaster ;-)
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
Salut,
jp@MDK:~/tmpfs ssh$ ls -1 *.txt
tata_20080816.txt
tati_20080816.txt
tato_20080816.txt
tatu_20080816.txt
tita_20080816.txt
titi_20080816.txt
tito_20080816.txt
titu_20080816.txt
tota_20080816.txt
toti_20080816.txt
toto_20080816.txt
totu_20080816.txt
tuta_20080816.txt
tuti_20080816.txt
tuto_20080816.txt
tutu_20080816.txt

jp@MDK:~/tmpfs ssh$ for fich in *.txt;do echo "mv $fich $(sed 's/\(.*\)_\(.*\)\.\(.*\)/\2_\1.\3/' <<<$fich)";done

mv tata_20080816.txt 20080816_tata.txt
mv tati_20080816.txt 20080816_tati.txt
mv tato_20080816.txt 20080816_tato.txt
mv tatu_20080816.txt 20080816_tatu.txt
mv tita_20080816.txt 20080816_tita.txt
mv titi_20080816.txt 20080816_titi.txt
mv tito_20080816.txt 20080816_tito.txt
mv titu_20080816.txt 20080816_titu.txt
mv tota_20080816.txt 20080816_tota.txt
mv toti_20080816.txt 20080816_toti.txt
mv toto_20080816.txt 20080816_toto.txt
mv totu_20080816.txt 20080816_totu.txt
mv tuta_20080816.txt 20080816_tuta.txt
mv tuti_20080816.txt 20080816_tuti.txt
mv tuto_20080816.txt 20080816_tuto.txt
mv tutu_20080816.txt 20080816_tutu.txt

jp@MDK:~/tmpfs ssh$
Si ça marche, enlève juste le "echo" et les quotes doubles, et roulez jeunesse :-))
Messages postés
5476
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
25 février 2021
926
Salut Zeunixnewbie, Salut Jpicy,

En adaptant l'expression de Jipicy, on peut aussi faire çà

ls -1 *.txt | sed 's/\(.*\)_\(.*\)\.\(.*\)/mv \1_\2\.\3 \2_\1.\3/'

et rajouter un pipe vers sh si c'est ce qui est attendu :

ls -1 *.txt | sed 's/\(.*\)_\(.*\)\.\(.*\)/mv \1_\2\.\3 \2_\1.\3/' | sh


Dal
Messages postés
5476
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
25 février 2021
926
Essaye çà :

ls -1 *.txt | sed 's/\(.*\)_\(.\{6\}\)\(.*\)\.\(.*\)/mv \1_\2\3\.\4 \2_\1.\4/'

(c'est sur une seule ligne)

Et rajoute le pipe vers sh si celà te convient.

[idem pour la solution de Jipicy, tu intercales \(.\{6\}\) à la suite du underscore et le \3 devient \4 car il y a désormais 4 captures]


Dal
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 837
Pas mieux ;-))

Merci ;-)
Messages postés
5476
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
25 février 2021
926 >
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020

Salut Jipicy,

Pour çà aussi, moi je dis .. "pas mieux" : http://www.commentcamarche.net/faq/sujet 9536 sed introduction a sed part i

çà aidera notre ami zeunixnewbie à comprendre .. en particulier ce passage :

http://www.commentcamarche.net/faq/sujet 9559 sed introduction a sed part ii#les sous expressions et references arrieres


Dal