URL: https://linuxfr.org/forums/astucesdivers/posts/terminal-manipulation-des-noms-de-fichiers-comportant-des-espa Title: [Terminal] Manipulation des noms de fichiers comportant des espaces. Authors: platinum Date: 2005年05月16日T14:13:10+02:00 Tags: Score: 0 Il m'arrive souvent de récupérer la sortie l'un ls ou d'un find dans une variable du shell. Seulement voilà, le shell découpe ces noms quand il y a un caractère espace et on peut se retrouver avec deux items au lieu d'un seul dans une commande for. Afin de découper correctement une liste de noms, il faut modifier (temporairement, localement) la variable d'environnement IFS pour obtenir le découpage voulu. Un peu de code vaut mieux qu'un long discours. Affichage du répertoire courant : **(IFS=$(echo -e "\n\r") ; for f in $(ls) ; do echo "-> $f" ; done)** Idem, mais avec les valeurs hexa de \n et \r **(IFS=$(echo -e "\x0A\x0D") ; for f in $(ls) ; do echo "-> $f" ; done)** Explications : - parenthèse de gauche : démarre un sous-shell pour isoler cette portion de code (parce que peut-être que d'autres portions peuvent être perturbée par la nouvelle valeur d'IFS) - IFS=$(echo -e "\n\r") : on met dans IFS le résultat de l'affichage de la commande echo en évaluant (**-e**) l'expression qui suit. - Y'a plus qu'à. Un autre exemple avec find et une tabulation horizontale comme séparateur : **(IFS=$(echo -e "\t") ; for f in $(find . -printf "%p\t") ; do echo "-> $f" ; done)** Pour vider IFS : **unset IFS** Et n'oubliez pas, pour remettre d'applomb votre terminal : **reset** (ça sert surtout quand le teminal affiche n'importe quoi comme police).