[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash et les expaces dans les noms de fichiers



Bonsoir,

L'origine de ton problème est l'IFS.

Tu peux essayer de faire IFS=$(echo -ne "\n\b"):

$ for i in foo bar baz; do mkdir "foo $i"; done

$ IFS=$(echo -en "\n\b")

$ for i in $(find . -mindepth 1 -type d); do echo $i; done
./foo baz
./foo bar
./foo foo

hope this helps.

Séb

Le 12/02/2013 19:01, Philippe Delavalade a écrit :
Bonjour.

J'ai un pépertoire qui contient des sous-répertoires ; dans chacun de ces
derniers j'ai des fichiers sur lesquels je veux faire des opérations
(toujours les mêmes).

J'ai donc envisagé un script du genre

for dir in `find -mindetph 1 -type d`
do
   pushd "$dir"
   commande1
   ...
   commanden
   popd
done

l'option -mindepth est là pour éviter les soucis avec ./

Seulement ça ne marche pas car certains des sous-répertoires comporte une
espace (ou plusieurs) dans leur nom.

J'ai créé à titre d'exemple, un répertoire machin dans lequel j'ai créé
cinq sous-répertoires.

voici ce que ça donne

philippe:~/machin$ for dir in `find -mindepth 1 -type d`
do
   echo "$dir"
done
./blu
blu
blu
./ble
ble
ble
./bli
bli
bli
./bla
bla
bla
./blo
blo
blo

En fait les noms sont « splités » et donc ça ne marche pas.

Autre essai :

philippe:~/machin$ for dir in "`find -mindepth 1 -type d`"
do
   echo "$dir"
done
./blu blu blu
./ble ble ble
./bli bli bli
./bla bla bla
./blo blo blo

Là ça paraît mieux, j'ai bien les cinq sous-répertoires mais :

philippe:~/machin$ for dir in "`find -mindepth 1 -type d`"
do
   echo "$dir"
   pushd "$dir"
   echo "On est dans `pwd`"
   popd
done
./blu blu blu
./ble ble ble
./bli bli bli
./bla bla bla
./blo blo blo
bash: pushd: ./blu blu blu
./ble ble ble
./bli bli bli
./bla bla bla
./blo blo blo: Aucun fichier ou dossier de ce type
On est dans /home/philippe/machin
bash: popd: pile de répertoire vide

Là ça se passe comme s'il n'y avait qu'un seul sous-répertoire dans machin
(une sorte de concaténation des cinq noms).

J'ai, à tout hasard, essayé avec "${dir}" au lieu de "$dir" mais c'est la
même chose.

J'ai cherché dans abs-guide mais je n'ai rien trouvé comme idée nouvelle.

J'ai bien la possibilité de faire un
rename 's/ /#/g' *
mais c'est du bricolage...

Quelqu'un aurait-il une suggestion plus académique ?

Merci d'avance.



Reply to: