[bash] problème des espaces dans les noms
Résolu/Fermé
tlep
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
-
16 janv. 2007 à 19:07
nitneuc - 7 mai 2014 à 14:29
nitneuc - 7 mai 2014 à 14:29
A voir également:
- [bash] problème des espaces dans les noms
- Les noms des animaux - Télécharger - Études & Formations
- Espaces insécables - Guide
- Vous avez accès à des espaces partagés sur l’espace pix cloud ci-dessous. parmi les affirmations suivantes à propos des membres de l’équipe logistique, lesquelles sont vraies ? - Forum Bases de données
- Samira a modifié le menu du jour que juliette lui avait envoyé. retrouvez les modifications proposées par samira : acceptez celles concernant les entrées, refusez celles concernant les plats et les desserts. combien de caractères (en incluant les espaces) contient la version finale du menu ? - Forum Matériel & Système
- Tapez cette phrase, en respectant bien les espaces et la ponctuation. - Guide
10 réponses
tlep
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
118
17 janv. 2007 à 11:20
17 janv. 2007 à 11:20
Bon, g trouve (un peu crade mais ca marche) en changeant IFS:
IFS=$'\n' && for i in $(find /home/thierry/ -iname '*.jpg');do echo "`dirname $i`" && echo "`basename $i`";done
IFS=$'\n' && for i in $(find /home/thierry/ -iname '*.jpg');do echo "`dirname $i`" && echo "`basename $i`";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
16 janv. 2007 à 23:48
16 janv. 2007 à 23:48
Salut,
et si tu fait
Je veux chercher des images ".jpg" , et afficher leur nom,
et si tu fait
Je veux chercher des images ".jpg" , et afficher leur nom,
find /chemin/vers/photos -iname '*.jpg' -exec basename {} \;puis leur chemin.
find /chemin/vers/photos -iname '*.jpg' -exec dirname {} \;
tlep
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
118
17 janv. 2007 à 09:54
17 janv. 2007 à 09:54
Ah ben merci, je ne connaissais pas "dirname".
En revanche, si je veux passer le dirname en variable, j'ai toujours le meme problème de tronquage dès qu'il y a un espace dans un nom de répertoire.
for i in `find /home/ihmcrm/ -iname "*.jpg"`;do echo dirname "$i";done|more
Quid ?
En revanche, si je veux passer le dirname en variable, j'ai toujours le meme problème de tronquage dès qu'il y a un espace dans un nom de répertoire.
for i in `find /home/ihmcrm/ -iname "*.jpg"`;do echo dirname "$i";done|more
Quid ?
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
17 janv. 2007 à 10:44
17 janv. 2007 à 10:44
Salut,
j'espère que tu as compris pourquoi ça ne marche pas :-)
quand on fait for i in $(find ....) , si les noms de fichiers ont des espaces (par exemple j'ai 2 fichiers a a.jpg et b c d.jpg) en fait ça reviens à
j'espère que tu as compris pourquoi ça ne marche pas :-)
quand on fait for i in $(find ....) , si les noms de fichiers ont des espaces (par exemple j'ai 2 fichiers a a.jpg et b c d.jpg) en fait ça reviens à
for i in a a.jpg b c d.jpget pas à ce que tu veux
for i in 'a a.jpg' 'b c d.jpg'
tlep
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
118
17 janv. 2007 à 11:07
17 janv. 2007 à 11:07
Ben pour etre franc je ne comprends pas trop, et surtout j'aimerais bien savoir comment résoudre ce problème, pour pouvoir utiliser mes chemins et fichiers en variables lol
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
16 janv. 2007 à 19:24
16 janv. 2007 à 19:24
Salut,
En double-quotant ta variable :
En double-quotant ta variable :
basename "$i"https://www.grymoire.com/Unix/Quote.html ;-))
tlep
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
118
16 janv. 2007 à 22:34
16 janv. 2007 à 22:34
Bin non!!
Le problème des espaces se pose aussi dans le chemin, et les doubles-quotes ne fonctionnent pas, avec ou sans guillemets:
for i in `find ~/Desktop/ -iname "*.jpg"`;do echo "${i%/*.[jJ][pP][gG]}/";done|more
A moins que je ne positionne pas les double-quotes là où il faut ?
Le problème des espaces se pose aussi dans le chemin, et les doubles-quotes ne fonctionnent pas, avec ou sans guillemets:
for i in `find ~/Desktop/ -iname "*.jpg"`;do echo "${i%/*.[jJ][pP][gG]}/";done|more
A moins que je ne positionne pas les double-quotes là où il faut ?
tlep
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
118
16 janv. 2007 à 23:15
16 janv. 2007 à 23:15
Sauf en jouant avec la variable globale IFS, mais je n'y arrive pas bien.
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
17 janv. 2007 à 11:11
17 janv. 2007 à 11:11
Ben pour etre franc je ne comprends pas trop,
Pour comprendre
for i in a a.jpg b c d.jpg
ici il lit 5 éléments
a
a.jpg
b
c
d.jpg
(vu que l'espace c'est le séparateur de la liste
au lieu
de 2 éléments a a.jpg et b c d.jpg
Pour la solution, j'ai une idée mais en Perl.
Pour comprendre
for i in a a.jpg b c d.jpg
ici il lit 5 éléments
a
a.jpg
b
c
d.jpg
(vu que l'espace c'est le séparateur de la liste
au lieu
de 2 éléments a a.jpg et b c d.jpg
Pour la solution, j'ai une idée mais en Perl.
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
17 janv. 2007 à 11:35
17 janv. 2007 à 11:35
un peu crade mais ca marche
ce n'est pas du tout crade :-))
ce n'est pas du tout crade :-))
Ça n'est pas mieux... ça empêche de mettre @ dans les noms de fichiers. La solution avec IFS est mieux.
tlep
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
118
17 janv. 2007 à 16:07
17 janv. 2007 à 16:07
ah y'a mieux apparemment :
for i in `find /home/thierry/ -iname "*.jpg"|sed s/" "/"@"/`; do echo `dirname $i|sed s/"@"/"\ "/`;done
for i in `find /home/thierry/ -iname "*.jpg"|sed s/" "/"@"/`; do echo `dirname $i|sed s/"@"/"\ "/`;done
tlep
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
118
17 janv. 2007 à 16:36
17 janv. 2007 à 16:36
Le problème étant que je ne peux pas écrire dans le répertoire qui contient un espace, j'ai modifié comme suit:
for i in `find /home/thierry/ -iname "*.jpg"|sed s/" "/"@"/`;
do
chemin=`dirname $i|sed s/"@"/"\ "/`
&& echo $chemin
&& touch "${chemin}/"coucou.txt;
done
Voili voila, je pense que ca pourra servir à d'autres ;-)
for i in `find /home/thierry/ -iname "*.jpg"|sed s/" "/"@"/`;
do
chemin=`dirname $i|sed s/"@"/"\ "/`
&& echo $chemin
&& touch "${chemin}/"coucou.txt;
done
Voili voila, je pense que ca pourra servir à d'autres ;-)