Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

boucle sur des noms avec des espaces

2 réponses
Avatar
mpg
Bonjour,

Depuis qu'on m'a montré comment faire des boucles for avec un shell, je suis
tout content et j'en mets un peu à toutes les sauces (y compris en
interactif). Sauf que.

Je me suis rendu compte qu'il y avait des gros trous dans mon savoir tout
neuf en essayant de faire :
for i in `ls .`; do something-with $i; done;
dans un répertoire comportant plein de fichiers avec des espaces dans leur
nom... vous vous doutez de ce qui arriva : pour chaque fichier 'a b' j'ai
eu droit à un
'"a" : aucun fichier de ce type'
'"b" : aucun fichier de ce type'
que j'avais au fond bien mérité.

Y a-t-il moyen de s'en sorti quand même ? Pour le moment, j'ai salement
renommé mes fichiers sans espaces, puis fait le truc, puis renommé avec,
mais ça ne me plaît pas trop... Au cas où ça ferait une différence, je fais
ça avec zsh et la version GNU de ls, mais si il y a une façon standard de
le faire, ça m'intéresse aussi.

Merci d'avance !

Manuel.

2 réponses

Avatar
YBM
Bonjour,

Depuis qu'on m'a montré comment faire des boucles for avec un shell, je suis
tout content et j'en mets un peu à toutes les sauces (y compris en
interactif). Sauf que.

Je me suis rendu compte qu'il y avait des gros trous dans mon savoir tout
neuf en essayant de faire :
for i in `ls .`; do something-with $i; done;
dans un répertoire comportant plein de fichiers avec des espaces dans leur
nom... vous vous doutez de ce qui arriva : pour chaque fichier 'a b' j'ai
eu droit à un
'"a" : aucun fichier de ce type'
'"b" : aucun fichier de ce type'
que j'avais au fond bien mérité.

Y a-t-il moyen de s'en sorti quand même ?


for i in * ; do echo "$i"; done

les '"' autour de $i sont important aussi afin que la commande
exécutée reçoivent bien le fichier en argument et non deux (ou plus)
arguments.

Avatar
mpg
Le (on) jeudi 27 décembre 2007 02:59, YBM a écrit (wrote) :

for i in `ls .`; do something-with $i; done;
[...]
Y a-t-il moyen de s'en sorti quand même ?


for i in * ; do echo "$i"; done

les '"' autour de $i sont important aussi afin que la commande
exécutée reçoivent bien le fichier en argument et non deux (ou plus)
arguments.


Oki, super ! En plus c'est plus facile à taper et tout. J'aurais pu y penser
en fait... En tout cas merci pour ta réponse rapide et efficace. Pour
le "$i", j'y avais pensé, mais comme avec mon `ls .` il y avait déjà un
problème en amont... Enfin ça au moins je comprends pourquoi ils sont
utiles.

Manuel.