OVH Cloud OVH Cloud

Commande shell

6 réponses
Avatar
Lincoln B
Salut a tous,

je souhaite utiliser la commande find pour rechercher tous les fichier log.*
,les compresser avec gzip et effacer les fichier non compressé de depart.

Je connais les commande genres find . -name "core" | xargs rm

Mais la je bloque .

Merci de votre aide

6 réponses

Avatar
lhabert
"Lincoln B" :

je souhaite utiliser la commande find pour rechercher tous les fichier log.*
,les compresser avec gzip et effacer les fichier non compressé de depart.

Je connais les commande genres find . -name "core" | xargs rm

Mais la je bloque .


Bein pourtant, c'est exactement pareil :

find . -name 'log.*' | xargs gzip

. Bon, en mieux :

find . -name 'log.*' -print0 | xargs -0 gzip

, ça évite les ennuis au cas où il y aurait du whitespace quelque part...

Avatar
Lincoln B
Je viens de tester cette comande qui marche.
find . -name "log.*"-exec gzip -c {} > toto.gz ;
Mais le probleme est que je n'arrive pas a garder le meme nom pour le
fichier .gz.
La dans mon test je suis obligé de mettre toto.gz.
C'est un peu con

"Lincoln B" a écrit dans le message de news:
4522348d$0$31929$
Salut a tous,

je souhaite utiliser la commande find pour rechercher tous les fichier
log.* ,les compresser avec gzip et effacer les fichier non compressé de
depart.

Je connais les commande genres find . -name "core" | xargs rm

Mais la je bloque .

Merci de votre aide



Avatar
lhabert
"Lincoln B" :

Je viens de tester cette comande qui marche.
find . -name "log.*"-exec gzip -c {} > toto.gz ;


(Je suppose que tu avais mis un espace avant le « -exec ».)
Le problème avec ta commande, c'est que le shell exécute :

find . -name "log.*"-exec gzip -c {}

, et redirige sa sortie vers « toto.gz ». Si tu veux faire des redirections
dans la commande lancée par le « -exec », il faut faire quelque chose
comme :

find . -name "log.*" -exec sh -c 'gzip -c "$0" > "$0".gz' {} ;

. Ou encore, avec xargs :

find . -name "log.*" | xargs sh -c 'for f in "$@"; do gzip -c "$f" > "$f".gz; done' ploum

. Enfin en l'occurence, c'est de l'overkill, cf la solution que j'ai postée.

Avatar
Fabien LE LEZ
On Tue, 3 Oct 2006 10:21:03 +0000 (UTC), (Luc
Habert):

Enfin en l'occurence, c'est de l'overkill


Pire, ça ne répond pas au cahier des charges, puisque cette commande
n'efface pas les fichiers de départ (à moins que j'aie loupé quelque
chose ?)

Avatar
David LE BOURGEOIS

find . -name 'log.*' -print0 | xargs -0 gzip


find . -type f -name "log.*" -print0 | xargs -r0 gzip

"-type f" à find pour éviter d'envoyer un répertoire à gzip, qui ne
sera pas quoi en faire.

"-r" à xargs pour ne pas appeler gzip sans paramètres, si aucun fichier
n'est trouvé.

--
David LE BOURGEOIS
e-mail : david.lebourgeois (at) free.fr
jabber : david.lebourgeois (at) jabber.fr

Avatar
lhabert
David LE BOURGEOIS :

"-type f" à find pour éviter d'envoyer un répertoire à gzip, qui ne
sera pas quoi en faire.

"-r" à xargs pour ne pas appeler gzip sans paramètres, si aucun fichier
n'est trouvé.


Autant pour moi. Merci d'avoir corrigé.