Remplacer espacements dans noms de fichier
Résolu/Fermé
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
-
11 août 2007 à 21:11
Faulst - 13 juil. 2016 à 11:21
Faulst - 13 juil. 2016 à 11:21
A voir également:
- Remplacer caractère dans nom de fichier
- Caractère ascii - Guide
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Caractere speciaux - Guide
10 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
11 août 2007 à 21:20
11 août 2007 à 21:20
Salut,
si tu as la commande rename sur ton pc tu peux faire avec ça
si tu as la commande rename sur ton pc tu peux faire avec ça
lami20j@deb:~/trash/fic$ ls -1 aaa bbb ddd eee ddd eee kdjf ddd eee kdjf lsdkjfklsd ddd eee kdjf lsdkjfklsd dfj lami20j@deb:~/trash/fic$ rename 's/\s+/_/g' * lami20j@deb:~/trash/fic$ ls -1 aaa_bbb ddd_eee ddd_eee_kdjf_ ddd_eee_kdjf_lsdkjfklsd_ _ddd_eee_kdjf_lsdkjfklsd_dfj_ lami20j@deb:~/trash/fic$
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
11 août 2007 à 22:02
11 août 2007 à 22:02
Salut lami20j,
Je viens de verifier et la commande RENAME est disponible dans mon shell. La, tu ne le sais peut-etre pas mais tu viens de me rendre un tres grand service.
Mais si tu peux, tu peux mettre une cerise sur mon sundae en me disant si je peux mettre le resultat d'un traitement de la commande awk dans une variable. Ca pourra m'etre utile a l'avenir. Ca n'a pas beaucoup de sens que de traiter des donnees et de ne pas les mettre dans des variables et de se contenter seulement de les afficher. Il y a surement un moyen de le faire. Les pages man de mawk ne sont pas tellement claires.
J'ai essaye des choses du genre :
nouveau_fichier=echo abacd | awk '{ gsub(/a/, "A"}'
mv -T vieux_fichier nouveau_fichier
mais ca ne fonctionne pas.
Si tu ne le sais pas, ce n'est pas si grave. Tu en as deja assez fait. J'ai plus de 1500 fichiers a changer de noms. Tu imagines donc le temps epargne par ta commande.
Pour le moment, je vais essayer ta commande sur mes fichiers.
Merci infiniment lami20j
Je viens de verifier et la commande RENAME est disponible dans mon shell. La, tu ne le sais peut-etre pas mais tu viens de me rendre un tres grand service.
Mais si tu peux, tu peux mettre une cerise sur mon sundae en me disant si je peux mettre le resultat d'un traitement de la commande awk dans une variable. Ca pourra m'etre utile a l'avenir. Ca n'a pas beaucoup de sens que de traiter des donnees et de ne pas les mettre dans des variables et de se contenter seulement de les afficher. Il y a surement un moyen de le faire. Les pages man de mawk ne sont pas tellement claires.
J'ai essaye des choses du genre :
nouveau_fichier=echo abacd | awk '{ gsub(/a/, "A"}'
mv -T vieux_fichier nouveau_fichier
mais ca ne fonctionne pas.
Si tu ne le sais pas, ce n'est pas si grave. Tu en as deja assez fait. J'ai plus de 1500 fichiers a changer de noms. Tu imagines donc le temps epargne par ta commande.
Pour le moment, je vais essayer ta commande sur mes fichiers.
Merci infiniment lami20j
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
11 août 2007 à 22:15
11 août 2007 à 22:15
bon, awk je n'ai pas fait (ça me suffit perl :-))
en revanche voici avec sed
en revanche voici avec sed
:~/trash/fic$ ls -1 aaa bbb ddd eee ddd eee kdjf ddd eee kdjf lsdkjfklsd ddd eee kdjf lsdkjfklsd dfj :~/trash/fic$ IFS="\n";for i in *;do mv $i $(echo $i | sed -r 's/\s+/_/g');done :~/trash/fic$ ls -1 aaa_bbb ddd_eee ddd_eee_kdjf_ ddd_eee_kdjf_lsdkjfklsd_ _ddd_eee_kdjf_lsdkjfklsd_dfj_ lami20j@deb:~/trash/fic$
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
11 août 2007 à 22:21
11 août 2007 à 22:21
voilà ta commande avec awk
:~/trash/fic$ nouveau_fichier=$(echo abacd | awk '{ gsub(/a/, "A");print}') :~/trash/fic$ echo $nouveau_fichier AbAcdà toi d'adapter à ton cas :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
11 août 2007 à 22:27
11 août 2007 à 22:27
ok, et voilà une version awk
$ ls -1 aaa bbb ddd eee ddd eee kdjf ddd eee kdjf lsdkjfklsd ddd eee kdjf lsdkjfklsd dfj $ IFS="\n";for i in *;do mv $i $(echo $i | awk '{ gsub(/ /, "_");print}');done $ ls -1 aaa_bbb ddd_eee ddd_eee_kdjf_ ddd_eee_kdjf_lsdkjfklsd_ ___ddd_eee_kdjf_lsdkjfklsd__dfj__ $
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
11 août 2007 à 22:28
11 août 2007 à 22:28
Salut,
Pour la petite histoire de ton script de départ :
Pour la petite histoire de ton script de départ :
[tmpfs]$ var="Mon fichier avec plein d'espaces" [tmpfs]$ echo $var Mon fichier avec plein d'espaces [tmpfs]$ echo ${var// /_} Mon_fichier_avec_plein_d'espaces [tmpfs]$Donc en adaptant :
#! /bin/bash rep="/media/sda5/Informatique/Linux/Test" cd $rep for file in * ; do mv -T "$file" ${file// /_} done;-))
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
11 août 2007 à 22:31
11 août 2007 à 22:31
Salut,
je crois qu'on peut mettre résolu :-)
qu'en penses-tu?! ;-)
je crois qu'on peut mettre résolu :-)
qu'en penses-tu?! ;-)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
11 août 2007 à 22:36
11 août 2007 à 22:36
qu'en penses-tu?
De crabe ou de cheval...
Je te laisse chercher, bonne soirée et te casses pas trop la tête ;-)))))))
De crabe ou de cheval...
Je te laisse chercher, bonne soirée et te casses pas trop la tête ;-)))))))
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
13 août 2007 à 00:37
13 août 2007 à 00:37
Salut,
Désolé lami20j et jipicy pour le délai de ma réponse mais j'ai eu un problème avec Internet. Après avoir essayé les trois autres façons que vous m'avez suggérées j'ai constaté qu'elles fonctionnent toutes très bien.
Donc, on récapitule les différentes facons pour remplacer les espacements par des traits soulignés dans des noms de fichiers.
Méthode 1 - Avec la commande rename (de lami20j)
$ rename 's/\s+/_/g' *
Méthode 2 - Avec la commande sed (de lami20j)
IFS="\n";for i in *;do mv $i $(echo $i | sed -r 's/\s+/_/g');done
Méthode 3 - Avec la commande awk (de lami20j)
IFS="\n";for i in *;do mv $i $(echo $i | awk '{ gsub(/ /, "_");print}');done
Méthode 4 - Avec la commande mv (de jipicy)
for file in * ; do mv -T "$file" ${file// /_} done
On constate donc qu'il y a plusieurs facons d'arriver au même résultat. Dire que j'ai passé plus d'une semaine sur ce problème. Mais ca m'a fait une très bonne pratique sur le shell. J'en connais beaucoup plus. Surtout avec l'assignation du traitement d'une commande awk a une variable donnée par lami20j. Je ne comprends pas car il me semble avoir essaye ça avant. En tous les cas...
Mais jipicy tu m'as fait sursauté avec ta solution car je constate que j'étais à un slash près d'avoir la solution!!! Je crois que je vais prendre la moitié du crédit ;). Ça veut donc dire que le bash considère le symbole / plus un espacement comme un espace.
Et oui, lami20j tu as bien raison. Je crois que je peux mettre maintenant ce problème comme étant RÉSOLU.
Donc, merci beaucoup à vous deux :)
Désolé lami20j et jipicy pour le délai de ma réponse mais j'ai eu un problème avec Internet. Après avoir essayé les trois autres façons que vous m'avez suggérées j'ai constaté qu'elles fonctionnent toutes très bien.
Donc, on récapitule les différentes facons pour remplacer les espacements par des traits soulignés dans des noms de fichiers.
Méthode 1 - Avec la commande rename (de lami20j)
$ rename 's/\s+/_/g' *
Méthode 2 - Avec la commande sed (de lami20j)
IFS="\n";for i in *;do mv $i $(echo $i | sed -r 's/\s+/_/g');done
Méthode 3 - Avec la commande awk (de lami20j)
IFS="\n";for i in *;do mv $i $(echo $i | awk '{ gsub(/ /, "_");print}');done
Méthode 4 - Avec la commande mv (de jipicy)
for file in * ; do mv -T "$file" ${file// /_} done
On constate donc qu'il y a plusieurs facons d'arriver au même résultat. Dire que j'ai passé plus d'une semaine sur ce problème. Mais ca m'a fait une très bonne pratique sur le shell. J'en connais beaucoup plus. Surtout avec l'assignation du traitement d'une commande awk a une variable donnée par lami20j. Je ne comprends pas car il me semble avoir essaye ça avant. En tous les cas...
Mais jipicy tu m'as fait sursauté avec ta solution car je constate que j'étais à un slash près d'avoir la solution!!! Je crois que je vais prendre la moitié du crédit ;). Ça veut donc dire que le bash considère le symbole / plus un espacement comme un espace.
Et oui, lami20j tu as bien raison. Je crois que je peux mettre maintenant ce problème comme étant RÉSOLU.
Donc, merci beaucoup à vous deux :)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
13 août 2007 à 09:28
13 août 2007 à 09:28
Re-
Ça veut donc dire que le bash considère le symbole / plus un espacement comme un espace.
Pas tout a fait. Les "/" sont des délimiteurs, après entre ces slashs tu mets ce qui doit être mis en correspondance et être remplacer dans ta variable.
Voir : man bash -P 'less -p "paramètre/motif/chaîne"'
;-))
Ça veut donc dire que le bash considère le symbole / plus un espacement comme un espace.
Pas tout a fait. Les "/" sont des délimiteurs, après entre ces slashs tu mets ce qui doit être mis en correspondance et être remplacer dans ta variable.
Voir : man bash -P 'less -p "paramètre/motif/chaîne"'
;-))
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
14 août 2007 à 19:50
14 août 2007 à 19:50
Salut jipicy,
Je n'ai pas tout a fait saisi ce que tu voulais dire. Mais je vais relire la page man de bash a propos des parametres, motifs et chaine. Mais je ne comprends pas pourquoi tu mets des mots francais entre guillemets dans la commande que tu donnes.
$ man bash -P 'less -p "paramètre/motif/chaîne"'
L'option -P correspond a specifier quel "output pager" utiliser.
J'ai essaye ta commande et ca donne :
Pattern not found (press RETURN)
Je presse RETURN et ca me ramene tout simplement a la page man de bash en anglais. Je travaille avec Edgy Eft.
Est-ce que tes pages man sont en francais?
Merci
Je n'ai pas tout a fait saisi ce que tu voulais dire. Mais je vais relire la page man de bash a propos des parametres, motifs et chaine. Mais je ne comprends pas pourquoi tu mets des mots francais entre guillemets dans la commande que tu donnes.
$ man bash -P 'less -p "paramètre/motif/chaîne"'
L'option -P correspond a specifier quel "output pager" utiliser.
J'ai essaye ta commande et ca donne :
Pattern not found (press RETURN)
Je presse RETURN et ca me ramene tout simplement a la page man de bash en anglais. Je travaille avec Edgy Eft.
Est-ce que tes pages man sont en francais?
Merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
14 août 2007 à 21:03
14 août 2007 à 21:03
Re-
Est-ce que tes pages man sont en francais?
Pour la plupart oui ;-))
Est-ce que tes pages man sont en francais?
Pour la plupart oui ;-))
${paramètre/motif/chaîne} ${paramètre//motif/chaîne} Le motif est développé comme dans le traitement des noms de fichiers. Le paramètre est développé et la plus longue portion correspondant au motif est remplacée par la chaîneg. Dans la première forme, seule la première correspondance est remplacée, dans la seconde toutes les portions correspondant au motif sont remplacées par la chaîne. Si le motif commence par #, il doit correspondre au début de la valeur développée du paramètre. Si le motif commence par %, il doit correspondre à la fin du développement du paramètre. Si la chaîne est nulle, les por- tions correspondant au motif sont supprimées et le / après le motif peut être omis. Si le paramètre est @ ou *, l'opération de substitution est appliquée à chacun des paramètres position- nels successivement, et le résultat est la liste finale. Si le paramètre est une variable tableau indexée par @ ou *, l'opération de substitution s'applique à chaque membre du tableau successivement, et le résultat est la liste finale.;-))
artagon7
Messages postés
415
Date d'inscription
dimanche 6 novembre 2005
Statut
Membre
Dernière intervention
11 février 2024
7
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
17 août 2007 à 07:11
17 août 2007 à 07:11
Salut Jipicy,
C'est bon a savoir car mon anglais est souvent deficient.
Merci ;)
C'est bon a savoir car mon anglais est souvent deficient.
Merci ;)
tifo85
Messages postés
4
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
23 août 2009
6 mars 2009 à 00:44
6 mars 2009 à 00:44
slt
esque en peut elliminer les blanc exemple :
Donner : aaa zzz eee
res : aaazzzeee
merci
esque en peut elliminer les blanc exemple :
Donner : aaa zzz eee
res : aaazzzeee
merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
6 mars 2009 à 08:26
6 mars 2009 à 08:26
Salut,
Oui.
Oui.
[tmpfs]$ var="Mon nom de fichier avec plein d'espaces" [tmpfs]$ echo ${var} Mon nom de fichier avec plein d'espaces [tmpfs]$ echo ${var// /} Monnomdefichieravecpleind'espaces [tmpfs]$ echo ${var} | tr -d ' ' Monnomdefichieravecpleind'espaces [tmpfs]$