Script bash, gestion des espaces dans les noms de fichiers

Le
Cedric Foll
Bonjour,



j'ai un script bash qui fait ceci:
--
for i in `find rep -type -f`; do
#qq chose avec le fichier $i
done
--

Cela marche bien tant que je n'ai pas d'espace dans un nom de fichier.
Lorsque cela arrive, je me retrouve avec le nom coupé en 2. $i prend la
première partie puis la seconde.

J'ai essayé de faire un
find rep -type -f -exec echo '{}' ;
à la place.
Sauf qu'ensuite bash me fait des ' lorsque je veux traiter $i et donc
on me dit que je fichier n'existe pas.

Quelle est la solution ?

Comment faire qq chose avec tous les fichiers d'un répertoire lorsque
les fichiers peuvent contenir des espaces ?

Merci.
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Stephane Chazelas
Le #507761
2004-10-13, 12:25(+02), Cedric Foll:
[...]
j'ai un script bash qui fait ceci:
-----
for i in `find rep -type -f`; do
#qq chose avec le fichier $i
done
-----
[...]


find rep -type f -exec bash -c '
i=$1
#qq chose avec le fichier "$i"
' {} {} ;

Ou encore (en supposant que les noms des fichiers ne contiennent
pas de sauts de lignes):

find rep -type f -print | while IFS= read -r i; do
#qq chose avec le fichier "$i"
# attention, stdin est modifié
done


ou encore

set -f
IFS='
'
for i in $(find rep -type f -print); do
#qq chose avec le fichier "$i"
done

--
Stephane

Nicolas George
Le #507759
Cedric Foll wrote in message
Quelle est la solution ?


rm -f /bin/bash
exec /bin/zsh

for i in rep/**/*(.); do
...
done

Zsh, c'est bien.

Cedric Foll
Le #507758
set -f
IFS='
'
for i in $(find rep -type f -print); do
#qq chose avec le fichier "$i"
done



Merci beaucoup!
Cela fonctionne parfaitement.

Stephane Chazelas
Le #507755
2004-10-13, 10:55(+00), Nicolas George:
Cedric Foll wrote in message
Quelle est la solution ?


rm -f /bin/bash
exec /bin/zsh

for i in rep/**/*(.); do
...
done
[...]


C'est pas tout-a-fait equivalent. L'equivalent de

find . -type f -print | ...

serait:

for i in rep/**/*(ND.); do
...
done

--
Stephane


andrea ferraris
Le #522132
Stephane Chazelas wrote:

2004-10-13, 12:25(+02), Cedric Foll:
[...]

j'ai un script bash qui fait ceci:
-----
for i in `find rep -type -f`; do
#qq chose avec le fichier $i
done
-----


[...]

find rep -type f -exec bash -c '
i=$1
#qq chose avec le fichier "$i"
' {} {} ;

Ou encore (en supposant que les noms des fichiers ne contiennent
pas de sauts de lignes):

find rep -type f -print | while IFS= read -r i; do
#qq chose avec le fichier "$i"
# attention, stdin est modifié
done


ou encore

set -f
IFS='
'
for i in $(find rep -type f -print); do
#qq chose avec le fichier "$i"
done



Comment seulement trois solutions?? Il y en a pas d'autres? ;-)

Quand il y a une question de shell script il faut voir s'il y a
deja une reponse de Stephane. S'il n'y a pas il faut patienter,
ou s'on est vraiement tres sur de la juste reponse, la donner
apres d'avoir controlle au moins deux ou trois fois sur tous les
documents officiaux disponibles sur le sujet et apres avoir enleve
toutes les affirmation des quelles on n'est pas absolument sur.
Enfin Stephane repondra aussi, et peut etre qu'il ne corrigera
votre reponse, mais surement il donnera une autre reponse meilleure.
C'est la vie, il faut savoir apprendre et il faut aussi avoir
des heros ;-).

Andrea


Poster une réponse
Anonyme