OVH Cloud OVH Cloud

[bash] problème(s)

3 réponses
Avatar
Pierre Mauduit
Bonjour la liste,

Bon, ca peut paraitre un peu HS, étant donné que ca cible pas
spécialement debian, mais en espérant que des bonnes âmes répondent :)

Voila, j'ai été confronté à un problème en voulant faire un script bash
concernant les espaces et les retours de lignes.

Pour faire simple, j'ai voulu faire un script qui permette d'effacer les
Thumbs.db dont windows raffole. Je sais que find intégre un -exec, mais
je ne sais plus exactement comment ca fonctionne (et ca ne résoud pas
mon problème de bash).

Donc je fais un "find ./ -name Thumbs.db > a_virer".
Ensuite, un "for i in `cat a_virer`;do rm -i $i;done"
Mais voila ca ne fonctionne pas, parce que les espaces ont l'air d'être
interprétés comme un "passage à l'élément suivant" dans la déclaration
du tableau.

C'est un exemple, mais j'ai eu le même problème dans un autre script.
Quelqu'un saurait-il comment gérer ce problème ?

D'avance merci.

--
Pierre


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

3 réponses

Avatar
François Schoubben
Pierre Mauduit a écrit :
Bonjour la liste,

Bon, ca peut paraitre un peu HS, étant donné que ca cible pas
spécialement debian, mais en espérant que des bonnes âmes répondent :)
[...]
Pour faire simple, j'ai voulu faire un script qui permette d'effacer les
Thumbs.db dont windows raffole. Je sais que find intégre un -exec, mais
je ne sais plus exactement comment ca fonctionne (et ca ne résoud pas
mon problème de bash).



find ./ -name Thumbs.db -exec rm -i {};
devrait fonctionner :-)

Donc je fais un "find ./ -name Thumbs.db > a_virer".
Ensuite, un "for i in `cat a_virer`;do rm -i $i;done"



et un
$... rm -i "$i"; done
?
Mais voila ca ne fonctionne pas, parce que les espaces ont l'air d'être
interprétés comme un "passage à l'élément suivant" dans la déclaration
du tableau.


c'est dans rm ça...

D'avance merci.



J'espère que ça marche...

--
Francois


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Sylvain Sauvage
Comput unicum 1113839153 (Mon, 18 Apr 2005 17:45:53 +0200),
Pierre Mauduit a écrit :

Bonjour la liste,



Bonjour,

[...]
Donc je fais un "find ./ -name Thumbs.db > a_virer".
Ensuite, un "for i in `cat a_virer`;do rm -i $i;done"
Mais voila ca ne fonctionne pas, parce que les espaces ont l'air d'être
interprétés comme un "passage à l'élément suivant" dans la dé claration
du tableau.

C'est un exemple, mais j'ai eu le même problème dans un autre script.
Quelqu'un saurait-il comment gérer ce problème ?




find . -name Thumbs.db -print0 | xargs -0 rm

Le -print0 demande une sortie avec des chaînes terminées par le caract ère
0 (comme en C), ce qui fait que les espaces sont traités comme des
caractères normaux. xargs récupère la liste sous cette forme grâce au -0.

--
Sylvain Sauvage
Avatar
ludo
Le lundi 18 avril 2005 à 17:45 +0200, Pierre Mauduit a écrit :
Bonjour la liste,

Bon, ca peut paraitre un peu HS, étant donné que ca cible pas
spécialement debian, mais en espérant que des bonnes âmes répondent :)

Voila, j'ai été confronté à un problème en voulant faire un script bash
concernant les espaces et les retours de lignes.

Pour faire simple, j'ai voulu faire un script qui permette d'effacer les
Thumbs.db dont windows raffole. Je sais que find intégre un -exec, mais
je ne sais plus exactement comment ca fonctionne (et ca ne résoud pas
mon problème de bash).




find ./ -name Thumbs.db -exec rm {} ;
{} représente chaque éléments trouvés
man find permet de se souvenir.

Donc je fais un "find ./ -name Thumbs.db > a_virer".
Ensuite, un "for i in `cat a_virer`;do rm -i $i;done"
Mais voila ca ne fonctionne pas, parce que les espaces ont l'air d'être
interprétés comme un "passage à l'élément suivant" dans la déclaration
du tableau.



tu peux directement faire :
for i in `find ./ -name Thumbs`
do
rm $i
done
Avec un '>' tu écrase le fichier à chaque éléments trouvé, il faudrait
plutôt faire un >> a_virer

C'est un exemple, mais j'ai eu le même problème dans un autre script.
Quelqu'un saurait-il comment gérer ce problème ?

D'avance merci.

--
Pierre






--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact