Renommer fichiers en masse ligne de commande

Résolu/Fermé
Abdenago - 11 févr. 2011 à 20:46
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 16 févr. 2011 à 17:01
Bonjour à tous,

Voilà, je voudrais renommer 242 fichiers en ligne de commande. Les noms doivent etre des nombres consécutifs, si vous avez ça..

truc.zip ; machin.zip ; bidule.zip ===> 1.zip ; 2.zip ; 3.zip



A voir également:

8 réponses

J'ai trouvé :D

initials@alexis:~/test$ touch {toto,titi,tata,tutu}.txt
initials@alexis:~/test$ ls 
tata.txt  titi.txt  toto.txt  tutu.txt 
initials@alexis:~/test$ j=0; for f in *.txt; do let j+=1; mv -v "$f" "$j.txt"; done 
« tata.txt » -> « 1.txt » 
« titi.txt » -> « 2.txt » 
« toto.txt » -> « 3.txt » 
« tutu.txt » -> « 4.txt » 
initials@alexis:~/test$ 


If you want to go quickly, go alone. If you want to go far, go together.
2
Utilisateur anonyme
14 févr. 2011 à 18:42
Abdenago ça t'intéresse plus?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 févr. 2011 à 18:45
Salut,

Apparemment non ;-(

Ça devait être du genre pressé qui veut du tout cuit ;-\
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
16 févr. 2011 à 17:01
$ tree
.
|-- fich1.zip
|-- fich2.zip
'-- rep
    |-- fich3.zip
    |-- fich4.zip
    |-- rep1
    |   |-- sous-rep1
    |   |   |-- fich5.zip
    |   |   '-- fich6.zip
    |   '-- sous-rep2
    |       |-- fich5.zip
    |       '-- fich6.zip
    '-- rep2
        |-- sous-rep1
        |   |-- fich7.zip
        |   '-- fich8.zip
        '-- sous-rep2
            |-- fich7.zip
            '-- fich8.zip

7 directories, 12 files

$ i=0; for file in $( find . -type f -name "*.zip"); do name=$(basename $file);rep=$(dirname $file); mv -v $rep/$name $rep/$i.zip;((i++)); done

'./fich2.zip' -> './0.zip'
'./fich1.zip' -> './1.zip'
'./rep/fich4.zip' -> './rep/2.zip'
'./rep/fich3.zip' -> './rep/3.zip'
'./rep/rep2/sous-rep2/fich8.zip' -> './rep/rep2/sous-rep2/4.zip'
'./rep/rep2/sous-rep2/fich7.zip' -> './rep/rep2/sous-rep2/5.zip'
'./rep/rep2/sous-rep1/fich8.zip' -> './rep/rep2/sous-rep1/6.zip'
'./rep/rep2/sous-rep1/fich7.zip' -> './rep/rep2/sous-rep1/7.zip'
'./rep/rep1/sous-rep2/fich6.zip' -> './rep/rep1/sous-rep2/8.zip'
'./rep/rep1/sous-rep2/fich5.zip' -> './rep/rep1/sous-rep2/9.zip'
'./rep/rep1/sous-rep1/fich6.zip' -> './rep/rep1/sous-rep1/10.zip'
'./rep/rep1/sous-rep1/fich5.zip' -> './rep/rep1/sous-rep1/11.zip'

$ tree
.
|-- 0.zip
|-- 1.zip
'-- rep
    |-- 2.zip
    |-- 3.zip
    |-- rep1
    |   |-- sous-rep1
    |   |   |-- 10.zip
    |   |   '-- 11.zip
    |   '-- sous-rep2
    |       |-- 8.zip
    |       '-- 9.zip
    '-- rep2
        |-- sous-rep1
        |   |-- 6.zip
        |   '-- 7.zip
        '-- sous-rep2
            |-- 4.zip
            '-- 5.zip

7 directories, 12 files

$

;-))


Pour plus de clarté dans le code...

i=0 ;
for file in $( find . -type f -name "*.zip") ;
do name=$(basename $file) ;
rep=$(dirname $file) ;
mv -v $rep/$name $rep/$i.zip ;
((i++)) ;
done
2
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 févr. 2011 à 22:43
Salut,

T'as essayé quoi pour l'instant ?
0
Eh bien je n'ai rien essayé puisque je n'ai rien trouvé.. ! :-(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zaki_N. Messages postés 107 Date d'inscription dimanche 2 mai 2010 Statut Membre Dernière intervention 8 décembre 2012 49
12 févr. 2011 à 14:24
0
Bonjour à TOUS,

Je n'ai pas eu accès à un internet pendant un certain temps, n'en déplaise à certain.
Merci à initials 76, j'ai pu bidouiller un peu avec ta méthode et j'ai réussi tant bien que mal! :-) Certains commentaires désobligeants sont à éviter je pense (zipe31) pour entretenir de bonnes relations..

Merci beaucoup! Résolu! :-)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 févr. 2011 à 20:13
Et tu m'en vois tout confus et tout heureux de tomber sur l'exception qui confirme la règle ;-))
0
Ne t'en fais pas, c'est pardonné! :)
0
Utilisateur anonyme
14 févr. 2011 à 21:59
Cool ^^

Il ne faut pas en vouloir à Zipe31, en général les demandes de ce genre sont des demandes
d'exercices et lorsque la réponse tombe, le demandeur ne revient jamais ;-)

Content d'avoir pu t'aider, j'ai appris en même temps ;-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
Modifié par lami20j le 14/02/2011 à 22:08
Salut,


j'ai appris en même temps ;-)


Tu peux toujours faire des économies de frappes;-)

touch {toto,titi,tata,tutu}.txt 
touch t{oto,iti,ata,utu}.txt
0
Utilisateur anonyme
14 févr. 2011 à 22:12
Salut :)

Hé hé oui aussi il fallait y penser, merci ;-)
0
HEELP!

Est il possible de faire un truc comme ça?

find . -name '*.zip' | xargs j=0; for f in *.zip; do let j+=1; mv -v "$f" "$j.zip"; done


:)

merci
0
Utilisateur anonyme
16 févr. 2011 à 14:19
Chez moi ça fonctionne, mais j'ai du ajouter un point-virgule après la commande xargs pour ne plus avoir le message d'erreur :
xargs : j=0 : aucun répertoire de ce type


C'est nécessaire d'utiliser find quand on utilises for f in *.zip?
La commande find ici s'applique au répertoire courant, non?

:)
0
En fait je voudrais renommer aussi les fichier des sous-répertoires, c'est pour ça ;)
0
Je met un point virgule, ça tourne mais ça ne renomme que les fichiers présents dans le répertoire courant :/ et pas la totalité des fichiers trouvé par find :(
0
Si tu veux chercher à partir de la racine c'est en root avec
find / -name


dans le répertoire précédent et courant j'ai utilisé ça :
find ./ ../ -name 


Mais fais gaffe au fichiers système.
0
Moi ce que je veux, c'est seulement les fichiers qui se trouvent dans le répertoire dans lequel je me trouve, ET dans ses sous-répertoires
0
Le find marche hein!
find ./Bureau/essai -name '*.zip'
==> je trouve tous les fichiers zip qui se trouvent dans le répertoire courant + ceux des sous répertoires.

mais quand je fais:
find ./Bureau/essai -name '*.zip' | exec; j=0; for f in *.zip; do let j+=1; mv -v "$f" "$j.zip"; done  

==> Il ne renomme que les fichiers du répertoire courant! je pense qu'il y a un problème avec 'exec'
0