Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/06/2013, à 12:25

GR 34

[RESOLU] problème avec les espace dans les noms de fichier ...

Bonjour,

Dans mon script shell, je recherche les fichiers d'un répertoire avec une boucle for :

...
for fichier in *.* 
do...

mais certains fichiers possèdent des espaces : alors la boucle for dès qu'elle rencontre un space, elle s'arrête !!

Alors je me suis dit avec si je passe chaque fichier avec detox, hop plus d'espace !!

Oui mais comment, appeler detox dans ma boucle for ?

Merci d'avance pour vos conseils...

Dernière modification par 6steme1 (Le 09/06/2013, à 16:17)


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#2 Le 09/06/2013, à 12:33

Kooothor

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Salut,

Une autre façon de faire à mon avis plus adéquate :

find . -exec <ton truc>\;

`find` est moins embêtant avec les fichiers qui contiennent des espaces smile

Hors ligne

#3 Le 09/06/2013, à 12:37

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

J'ai besoin de récupérer les noms des fichiers pour les ranger dans des répertoires suivant leur nom (la 1ere lettre de leur nom)

Il me faut donc une boucle.

Dernière modification par 6steme1 (Le 09/06/2013, à 13:51)


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#4 Le 09/06/2013, à 14:18

pingouinux

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Bonjour,
Il faut mettre des " " autour de la variable.

$ touch "fichier  dont   le   nom    contient    des espaces" "autre fichier"

$ for fichier in *; do echo "$fichier";done
autre fichier
fichier  dont   le   nom    contient    des espaces

Hors ligne

#5 Le 09/06/2013, à 14:28

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Salut,

Je pensais que la boucle for s'arrête dès qu'elle rencontre un espace ?? Et c'est bien ce qui se passe...

Faudrait que je la remplace par une boucle while mais là je n'arrive pas...


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#6 Le 09/06/2013, à 14:31

pingouinux

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

6steme1   #5 a écrit :

Je pensais que la boucle for s'arrête dès qu'elle rencontre un espace ?? Et c'est bien ce qui se passe...

L'exemple que je donne en #4 montre que ce n'est pas le cas. Que contient ta boucle ?

Hors ligne

#7 Le 09/06/2013, à 14:35

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

for fichier in *.* 
do
L=${fichier:0:1}   # L est la 1ere lettre du nom de fichier
case $L in
...

Je range mes fichiers dans des répertoires suivant la 1ere lettre de leur nom

Dès qu'un nom de fichier contient un espace ma boucle For s'arrête.

Dernière modification par 6steme1 (Le 09/06/2013, à 14:36)


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#8 Le 09/06/2013, à 14:50

pingouinux

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Il faut déplacer tes fichiers comme ceci :

mv "$fichier" répertoire_où_déplacer_le fichier

Hors ligne

#9 Le 09/06/2013, à 14:57

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Ça, je le fais après dans ma boucle, je n'ai posté que le début du script car il n'y a que là que réside le problème : quand mes fichiers n'ont pas d'espace, mon script les range impeccablement où je veux.

Mon problème c'est le For qui s'arrête dès qu'il rencontre un espace.


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#10 Le 09/06/2013, à 15:07

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

En fait, je me rends compte que seule une boucle while à la place de la boucle for arrangerait mon affaire :

Mais comment remplacer :

for fichier in *.* 
do
...

par une boucle while pour récupérer mes fichiers dans la variable fichier un à un et les traiter ?

Dernière modification par 6steme1 (Le 09/06/2013, à 15:08)


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#11 Le 09/06/2013, à 15:07

pingouinux

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Il faudrait au moins voir le message d'erreur, et la ligne qui en est la cause.
Tu peux aussi élaguer la boucle for, en n'y laissant que le minimum pour qu'elle plante, et montrer la boucle ainsi réduite.

Hors ligne

#12 Le 09/06/2013, à 15:13

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

pingouinux a écrit :

Il faudrait au moins voir le message d'erreur, et la ligne qui en est la cause.
Tu peux aussi élaguer la boucle for, en n'y laissant que le minimum pour qu'elle plante, et montrer la boucle ainsi réduite.

Mais c'est un fait connu, la boucle for s'arrête dès qu'elle rencontre un espace ! Pas besoin de message d'erreur, elle s'arrête c'est tout, c'est même pas une erreur.


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#13 Le 09/06/2013, à 15:15

pingouinux

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

6steme1   #10 a écrit :

Mais comment remplacer :

for fichier in *.* 
do
...

Par une boucle while pour récupérer mes fichiers un à un et les traiter ?

while read fichier
do
   …
done < <(ls *.*)

Mais ça ne changera rien si tu ne supprimes pas la cause de l'erreur.

Hors ligne

#14 Le 09/06/2013, à 15:18

pingouinux

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

6steme1   #12 a écrit :

Mais c'est un fait connu, la boucle for s'arrête dès qu'elle rencontre un espace !

C'est faux. Es-tu bien en bash ?

Dernière modification par pingouinux (Le 09/06/2013, à 15:19)

Hors ligne

#15 Le 09/06/2013, à 15:22

tiramiseb

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Mais c'est un fait connu, la boucle for s'arrête dès qu'elle rencontre un espace !

Par qui c'est "connu" ? C'est totalement faux, d'où tu sors ça ?

La boucle n'a aucun problème avec les espaces, d'ailleurs si tu regardais ton message d'erreur (qu'il serait pertinent de nous partager, hein, parce que bon, sans message d'erreur précis on ne donne pas de réponse précise) tu verras probablement que l'erreur ne vient pas de la boucle.

Ton script s'arrête au milieu de la boucle parce qu'il y a une erreur, ça ne vient pas dire que l'erreur vient de la boucle.


Menfin bon, pinguinux l'a bien expliqué, je ne vois pas quoi dire de plus...

Hors ligne

#16 Le 09/06/2013, à 15:27

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Lisez la remarque p.38 de http://fr.lang.free.fr/cours/Shell_v2.0.pdf

Edit :
@ tiramiseb : mon script s'arrête dès qu'il rencontre un nom de fichier contenant un espace... C'est comme le dit le pdf !!

Dernière modification par 6steme1 (Le 09/06/2013, à 15:28)


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#17 Le 09/06/2013, à 15:32

tiramiseb

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Sauf que tu n'es pas dans le même cas que ce qui est dans ce document.

Ce document évoque :

for fic in `ls`

Cette approche (qui est un très mauvais usage d'ailleurs, c'est crado, ça ne devrait pas être dans un tel document) fonctionne de la manière suivante :
1/ exécuter la commande "ls"
2/ faire une boucle sur le résultat (textuel) de la commande "ls"
Dans ce cas, dans la mesure où le séparateur de for est l'espace et que le résultat de la commande "ls" est traité comme une grosse chaîne, à chaque espacement la boucle for estime passer à une nouvelle entrée.

Dans ton cas, l'approche est la suivante :

for fichier in *.*

Là tu n'exécute pas de commande, tu ne lis pas un retour textuel.
Là, "for" parcourt tous les fichiers qui correspondent au pattern que tu indique (dans ton cas, *.*, que l'on peut traduire par "tout fichier dont le nom contient un point") et exécute la boucle une fois pour chaque fichier.


Avec le document que tu montres, si tu remplaces la ligne qu'il indique par :

for fic in *

tu n'aurais plus ce problème d'espace.

D'ailleurs pingouinux t'en a fait la démonstration en #4.

Dernière modification par tiramiseb (Le 09/06/2013, à 15:35)

Hors ligne

#18 Le 09/06/2013, à 15:34

tiramiseb

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

@ tiramiseb : mon script s'arrête dès qu'il rencontre un nom de fichier contenant un espace... C'est comme le dit le pdf !!

Ce n'est pas comme le dit le PDF, je l'ai expliqué au message précédent.

Tu préfères mettre en doute les paroles d'un mec qui fait du shellscript depuis 15 ans plutôt que de réfléchir à ton interprétation d'un document PDF que tu as lu ?


mon script s'arrête dès qu'il rencontre un nom de fichier contenant un espace

En s'arrêtant, ton script affiche forcément une erreur.

Quelle est cette erreur ?

Hors ligne

#19 Le 09/06/2013, à 15:39

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Erreur renvoyée :

[: -s : opérateur binaire attendu
mv : option invalide -- '1'

Nom de nom, ce ne serait pas mv qui serait perturbé par l'espace dans le nom de fichier ?

Dernière modification par 6steme1 (Le 09/06/2013, à 15:45)


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#20 Le 09/06/2013, à 15:46

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Sinon : ma question initiale était comment utiliser detox dans un script shell smile

Dernière modification par 6steme1 (Le 09/06/2013, à 15:46)


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#21 Le 09/06/2013, à 16:00

pingouinux

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

6steme1   #19 a écrit :

Nom de nom, ce ne serait pas mv qui serait perturbé par l'espace dans le nom de fichier ?

C'est ce que je t'ai indiqué dans mon message #8.

Sinon : ma question initiale était comment utiliser detox dans un script shell]

Il me semble que ton problème initial était l'arrêt de la boucle. De plus, je ne connais pas detox.

Hors ligne

#22 Le 09/06/2013, à 16:06

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

pingouinux a écrit :
6steme1   #19 a écrit :

Nom de nom, ce ne serait pas mv qui serait perturbé par l'espace dans le nom de fichier ?

C'est ce que je t'ai indiqué dans mon message #8.

Oui, pardonne-moi mais comme je fais 36 choses à la fois, j'ai zappé ton #8.

Je vais tenter et je te tiens au courant...

pingouinux a écrit :

Sinon : ma question initiale était comment utiliser detox dans un script shell]

Il me semble que ton problème initial était l'arrêt de la boucle. De plus, je ne connais pas detox.

Pour detox : http://linux.die.net/man/1/detox ce truc est génial, ça fait pas mal de choses en automatique...

J'aimerais bien m'en servir dans mon script car je veux enlever les espaces malgré tout.


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#23 Le 09/06/2013, à 16:16

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Bon ok, ça marche c'était bien sur mv le problème : je te remercie pour ton aide. smile

Je mets le sujet en résolu et je relance ma demande d'utilisation de detox dans un script.

Salut et merci encore.


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne

#24 Le 09/06/2013, à 16:51

pingouinux

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

Peux-tu donner un exemple de la façon dont tu utilises detox sur un fichier ?
Sinon, d'une manière générale :

for fichier in *.*
do
   nouveau_nom="$(fonction_qui_modifie_le_nom_du_fichier "$fichier")"
# Utilisation du nouveau nom
done

Hors ligne

#25 Le 09/06/2013, à 17:12

GR 34

Re : [RESOLU] problème avec les espace dans les noms de fichier ...

detox '/home/xxx/Bureau/Document sans nom 1' 

Résultat :

/home/xxx/Bureau/Document_sans_nom_1

C'est pas joli ça ? smile

Dernière modification par 6steme1 (Le 09/06/2013, à 17:12)


Karantez-vro...  Breizhad on ha lorc'h ennon !
«Les animaux sont mes amis. Et je ne mange pas mes amis.» George Bernard Shaw
https://www.l214.com/

Hors ligne