著者: nt.guilde 日付: To: guilde CC: guilde 題目: Re: shell
>Je n'ai pas réussi à reproduire l'erreur??? :-( >Peut-être aussi que cela dépend du shell utilisé (j'avais eu l'erreur
>sur un serveur Sun) ?
Te rappelles-tu du shell ?
>Un collègue de l'époque m'a alors indiqué une solution, qui marche et
>que j'ai gardée depuis, pour traiter une liste de *fichiers* d'une
>arborescence (pas les liens, pas les répertoires???).
>La voici:
>find . -type f -print | while read fichier ; do...
Si les noms de fichiers contiennent des espaces, 'read' lira des morceaux ;
ceci est mieux :
find . -type f -print | while IFS= read fichier ; do...
Mais il y a un autre problème : les commandes qui suivent 'do' ont leur
stdin connecté à la pipe, ce qui n'est pas le cas dans le cas du
'for i in...' ; donc :
exec 3<&0
find . -type f -print | while IFS= read fichier ; do
{ ... } <&3 3<&-
done
exec 3<&-
Autres possibilités :
find . -type f -exec command {} \;
find . -type f -exec command {} +
find . -type f -exec sh -c 'command "$0"' {} \;
find . -type f -exec sh -c 'command "$@"' nil {} +
Les deux dernières pour le cas où 'command' est composée.
"Bien que tout ceci soit faux, je ne le garantis pas."
-Nicolas T.