[Shell] Itérer des noms de fichiers contenant des espaces

Bonjour à tous,

J’utilise la fonction locate afin d’obtenir une liste de fichier et je souhaiterais afficher certains d’entre eux suivant plusieurs critères. Pour ce faire, j’ai besoin d’utiliser une boucle for afin d’effectuer mes tests sur chaque fichier. Malheureusement, certains noms de fichiers comporte des espaces ce qui fait que je n’obtiens pas le résultat attendu.

Je me suis renseigné du côté de locate et j’ai vu que l’on pouvait lui demander de terminé chaque entrée par un caractère nul (via l’option -0) au lieu d’un saut de ligne. Cependant, j’ai beau modifier la variable IFS en conséquence (avec IFS=printf "\0"), cela n’a pas l’air de fonctionner… :017

Quelqu’un aurait-il une solution (autre que de passer par un tableau)?

Je n’ai pas locate sous la main, mais en toute logique il renvoie un chemin par ligne, non ? Dans ce cas utilise plutôt une boucle while :

locate trucmuche | while read FICHIER; do ... done

Merci pour cette réponse, cela fonctionne parfaitement avec ce code :023
J’aurais juste une derrière question: que faire dans le cas où la sortie de locate est stockée dans une variable? Parce que, dans ce cas, les retours à la ligne sont convertis en espaces (ce qui ne m’arrange pas). Y-a-t-il moyen d’y remédier en conservant les sauts de lignes?

VARIABLE="$(locate trucmuche)" echo "$VARIABLE" | while read FICHIER; do ... done
Les guillemets (aussi bien pour la variable que pour le echo) sont importants pour conserver les sauts de ligne.

Voilà qui résous parfaitement mon problème.
Merci beaucoup :wink: