Commande pour renommer fichiers en masse
Résolu/Fermé
A voir également:
- Renommer un fichier linux
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Ouvrir un fichier .bin - Guide
6 réponses
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 569
16 févr. 2009 à 16:57
16 févr. 2009 à 16:57
Salut,
Un peu de recherche sur CCM et tu aurais trouvé
- avec rename
- avec sed
- avec awk
- avec script
Et un récap en bonus ;-)
Un peu de recherche sur CCM et tu aurais trouvé
- avec rename
- avec sed
- avec awk
- avec script
Et un récap en bonus ;-)
Alors donc,
J'ai essayé les trois dernières methodes proposées avec mv , awk et sed.
Les trois me donnent un résultat identique qui me pose problème.
J'ai un fichier nommé "fichier a renommer.txt" dans le repertoire "file"
Les lignes que j'ai écrites sont les suivantes : (ici avec sed, mais awk et mv donnent le même résultat.)
Résultat :
On dirait qu'il prend chaque bout de chaine de caractère séparé par un espace pour un fichier à part entière.
Pourtant les commandes ls * ou ls *.txt me ramènent convenablement le fichier à renommer.
J'aurai oublié quelque chose ?
Je vous avouerai que je nage un peu pour le coup.
J'ai essayé les trois dernières methodes proposées avec mv , awk et sed.
Les trois me donnent un résultat identique qui me pose problème.
J'ai un fichier nommé "fichier a renommer.txt" dans le repertoire "file"
Les lignes que j'ai écrites sont les suivantes : (ici avec sed, mais awk et mv donnent le même résultat.)
cd ${file} for toto in $(ls *); do mv $toto $(echo $toto | sed -r 's/\s+/_/g') done
Résultat :
mv: cannot stat `fichier': No such file or directory mv: cannot stat `a': No such file or directory mv: cannot stat `renommer.txt': No such file or directory
On dirait qu'il prend chaque bout de chaine de caractère séparé par un espace pour un fichier à part entière.
Pourtant les commandes ls * ou ls *.txt me ramènent convenablement le fichier à renommer.
J'aurai oublié quelque chose ?
Je vous avouerai que je nage un peu pour le coup.
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 569
18 févr. 2009 à 18:27
18 févr. 2009 à 18:27
Re,
Regarde bien, tu n'as pas écrit la commande complète.
Regarde bien, tu n'as pas écrit la commande complète.
Certes, il y a la commande
Ce qui m'embête avec ce bout de code c'est que mon "fichier à renommer.txt" va être découpé en "fichier a re" et "ommer.txt" lors de la selection et que du coup le renommage ne fonctionnera pas.
C'est d'autant plus ennuyeux que beaucoup de fichiers que je souhaite renommer vont avoir un préfixe contenant un "n".
J'ai fais quelques recherches infructueuses sur IFS.
Peut-être est il possible de définir autrement les séparateurs par défaut entre fichiers ?
Encore une fois je manque sans doute d'expérience et de recul pour comprendre exactement ce qui se passe dans ce problème.
C'est assez déroutant de voir qu'il y a des tas et des tas de solutions existantes pour arriver au même résultat.
IFS="\n";
Ce qui m'embête avec ce bout de code c'est que mon "fichier à renommer.txt" va être découpé en "fichier a re" et "ommer.txt" lors de la selection et que du coup le renommage ne fonctionnera pas.
C'est d'autant plus ennuyeux que beaucoup de fichiers que je souhaite renommer vont avoir un préfixe contenant un "n".
J'ai fais quelques recherches infructueuses sur IFS.
Peut-être est il possible de définir autrement les séparateurs par défaut entre fichiers ?
Encore une fois je manque sans doute d'expérience et de recul pour comprendre exactement ce qui se passe dans ce problème.
C'est assez déroutant de voir qu'il y a des tas et des tas de solutions existantes pour arriver au même résultat.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
3 Programmes avec interfaces graphiques ici :
http://linuxmanua.blogspot.com/2008/07/3-programmes-pour-renommer-en-masse-des.html
http://linuxmanua.blogspot.com/2008/07/3-programmes-pour-renommer-en-masse-des.html
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 569
19 févr. 2009 à 10:27
19 févr. 2009 à 10:27
Salut,
Je ne comprends pas.
Dans les exemples que je t'ai donnée, les fichiers contiennent des espaces dans leur nom.
Par exemple avec sed
http://www.commentcamarche.net/forum/affich 3382569 remplacer espacements dans noms de fichier#3
On voit bien que les fichier s'appellent
Je ne comprends pas.
Dans les exemples que je t'ai donnée, les fichiers contiennent des espaces dans leur nom.
Par exemple avec sed
http://www.commentcamarche.net/forum/affich 3382569 remplacer espacements dans noms de fichier#3
On voit bien que les fichier s'appellent
aaa bbb ddd eee ddd eee kdjf ddd eee kdjf lsdkjfklsd
Première bonne nouvelle : Je m'en suis enfin sorti en utilisant la quatrieme méthode proposée : le mv bête et méchant.
Il suffisait de revoir un tout petit peu la syntaxe pour que ca fonctionne
(le malheureux ; avant le done et le -T à changer)
Excellent exercice pour un débutant soit dit en passant.
La mauvaise nouvelle c'est que j'ai toujours pas compris pour l'IFS posait problème. Le caractère /n devrait coder pour un retour chariot. Or dans les faits, il prend à la fois les retours chariot séparant les fichiers et les "n" des chaines de caractère.
Dans l'exemple que tu me donnes il faudrait voir ce qui se passe si un de tes fichier est sous la forme
aaa bbb ccncc ddddd
A mon avis ca poserait le même problème.
Le principal étant que je trouve une solution à mon problème, on peut considérer le problème comme résolu.
Merci beaucoup pour ton aide lami20j
Il suffisait de revoir un tout petit peu la syntaxe pour que ca fonctionne
(le malheureux ; avant le done et le -T à changer)
for file in * ; do mv -f "$file" ${file// /_}; done
Excellent exercice pour un débutant soit dit en passant.
La mauvaise nouvelle c'est que j'ai toujours pas compris pour l'IFS posait problème. Le caractère /n devrait coder pour un retour chariot. Or dans les faits, il prend à la fois les retours chariot séparant les fichiers et les "n" des chaines de caractère.
Dans l'exemple que tu me donnes il faudrait voir ce qui se passe si un de tes fichier est sous la forme
aaa bbb ccncc ddddd
A mon avis ca poserait le même problème.
Le principal étant que je trouve une solution à mon problème, on peut considérer le problème comme résolu.
Merci beaucoup pour ton aide lami20j