A voir également:
- [shell] problème avec boucle find et espaces
- Espaces insécables - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Tapez cette phrase, en respectant bien les espaces et la ponctuation. - Guide
- En informatique, les informations sont codées par des 0 et des 1, appelés bits. un bit correspond à un espace mémoire. parmi les séquences ci-dessous, lesquelles occupent le moins d'espace en mémoire ? - Forum Programmation
- Shell pause ✓ - Forum Shell
14 réponses
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 nov. 2007 à 08:11
6 nov. 2007 à 08:11
Salut,
En fait oui c'est bien une histoire d'espace, dû non pas à la commande "find" mais à la boucle "for" et plus particulièrement à la valeur de la variable d'environnement "$IFS" (Input Field Separator), qui par défaut a pour valeur l'espace et tabulation et à qui il faut assigner la valeur "saut de ligne" (\n) :
Sinon une autre façon de faire est passer par une boucle "while", voir à ce sujet cette astuce dans la FAQ.
;-))
En fait oui c'est bien une histoire d'espace, dû non pas à la commande "find" mais à la boucle "for" et plus particulièrement à la valeur de la variable d'environnement "$IFS" (Input Field Separator), qui par défaut a pour valeur l'espace et tabulation et à qui il faut assigner la valeur "saut de ligne" (\n) :
OLD_IFS="$IFS" IFS=$'\n' for f in $(find . -type f -name "*.jpg"=; do mv -T "$f" "${f/Â/_}" done IFS="$OLD_IFS"Devrait marcher bien mieux.
Sinon une autre façon de faire est passer par une boucle "while", voir à ce sujet cette astuce dans la FAQ.
;-))
Ah super ! Merci, je connaissais pas ça... enfin c'est pas étonnant, j'ai raté quelques cours de shell :p
Sinon j'ai un autre soucis du coup... j'aimerais remplacer le caractère ° par _ dans ma boucle précédente... mais on dirait que cela ne fonctionne pas, car aucun fichier n'est modifié... Pourtant j'utilise la même boucle :
Sinon j'ai un autre soucis du coup... j'aimerais remplacer le caractère ° par _ dans ma boucle précédente... mais on dirait que cela ne fonctionne pas, car aucun fichier n'est modifié... Pourtant j'utilise la même boucle :
for f in `find . -type f -name "*.jpg" `; do mv -T "$f" "${f/°/_}" done
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 nov. 2007 à 09:21
6 nov. 2007 à 09:21
Il faut protéger l'étoile ( \* ) qui est un méta-caractère (ou joker si tu veux) afin qu'il ne soit pas interprété comme tel et lui rendre son sens littéral :
mv -T "$f" "${f/\°/_}";-))
En fait je dois être nouille mais cela ne marche pas :
Aucun fichier n'est modifié :(
Please help!!!
for f in `find . -type f -name "*.jpg" `; do mv -T "$f" "${f/\°/_}" done
Aucun fichier n'est modifié :(
Please help!!!
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 nov. 2007 à 09:45
6 nov. 2007 à 09:45
Attends là ! Faudrait qu'on se comprenne bien :-\
Le caractère " * " se trouve bien dans le nom de tes fichiers ? Ou tu me parles d'autre chose !?
Le caractère " * " se trouve bien dans le nom de tes fichiers ? Ou tu me parles d'autre chose !?
[tmpfs]$ var="mon * étoile" [tmpfs]$ echo "$var" mon * étoile [tmpfs]$ echo ${var/\*/_} mon _ étoile [tmpfs]$;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 nov. 2007 à 09:52
6 nov. 2007 à 09:52
Arf désolé, problème d'affichage ;-((
Bon mais en fait ça change pas grand chose :
Bon mais en fait ça change pas grand chose :
[tmpfs]$ var="mon n° à moi" [tmpfs]$ echo ${var/°/_} mon n_ à moiSi tu as des problèmes, affiches un exemple avec ton code et l'erreur générée.
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 nov. 2007 à 10:09
6 nov. 2007 à 10:09
Et les noms de tes fichiers dans le répertoire ils ressemble à quoi ?
Affiche un listing s'il te plaît "ls -1" (c'est un 1 (chiffre un) et pas un L minuscule, hein ?)
Affiche un listing s'il te plaît "ls -1" (c'est un 1 (chiffre un) et pas un L minuscule, hein ?)
Jury_n_°001.jpg Jury_n_°002.jpg Jury_n_°003.jpg Jury_n_°004.jpg Jury_n_°005.jpg Jury_n_°006.jpg ... Jury_n_°021.jpg Jury_n_°022.jpg
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 nov. 2007 à 10:19
6 nov. 2007 à 10:19
Ben je comprends pas non plus ;-\
[tmpfs]$ touch Jury_n_°00{1,2,3,4,5}.jpg [tmpfs]$ ls -1 Jury_n_°001.jpg Jury_n_°002.jpg Jury_n_°003.jpg Jury_n_°004.jpg Jury_n_°005.jpg [tmpfs]$ for f in *; do mv "$f" ${f/°/_}; done [tmpfs]$ ls -1 Jury_n__001.jpg Jury_n__002.jpg Jury_n__003.jpg Jury_n__004.jpg Jury_n__005.jpg [tmpfs]$Essaie d'exécuter ton script en mode débogage, ajoute "set -xv" après la ligne "shebang" (#! /bin/bash) et essaie de repérer où ça coince...
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
6 nov. 2007 à 10:47
6 nov. 2007 à 10:47
Salut,
ça ne te conviens pas la commande rename ?
ça ne te conviens pas la commande rename ?
rename 's/_\W/__/' Jury*.jpg
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 nov. 2007 à 10:52
6 nov. 2007 à 10:52
Ce n'est pas la peine d'échapper le "°" (${f/\°/_}), ce n'est pas un méta-caractère du shell !
Il ne te renvoie que ça comme sortie le débogage ?
Il en manque là, non ?
Il ne te renvoie que ça comme sortie le débogage ?
Il en manque là, non ?
heu non rename ca va pas trop, car les noms de fichiers sont jamais idnetiques, à part dans cet exemple....
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
6 nov. 2007 à 11:13
6 nov. 2007 à 11:13
car les noms de fichiers sont jamais idnetiques, à part dans cet exemple
ben, justement, on peut utiliser les regex et c'est très puissant
si on reviens à ton problème de début remplacer le caractère  par _ dans tous les noms de fichier .jpg on aura ça
ben, justement, on peut utiliser les regex et c'est très puissant
si on reviens à ton problème de début remplacer le caractère  par _ dans tous les noms de fichier .jpg on aura ça
rename 's/\xC2/_/' *.jpg
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
6 nov. 2007 à 12:00
6 nov. 2007 à 12:00
find . -name '*.jpg' -exec rename 's/°/_/' {} \;mais il faut voir qu'il s'agit bien de °il faut voir le code ascii de ce caractère pour être sur qu'on cherche le bon caractère