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

bash et les expaces dans les noms de fichiers



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.

-- 
Ph. Delavalade


Reply to: