Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/10/2010, à 23:49

biotechman

purger un .gz

Bonjour à tous,

je souhaite retirer des fichiers de log de apache toutes les lignes avec l'adresse IP d'une station de mon réseau locale.

J'ai fait un script qui ne donne que des fichiers vides, et je ne comprends pas pourquoi.

#!/bin/bash
for i in $(ls access.log.*.gz);do
    zcat $i | sed "/192.168.1.10/d" | gzip -f > $i
done

Merci d'avance


May the source be with you
http://biotechman.com/wordpress

Hors ligne

#2 Le 16/10/2010, à 00:06

chopinhauer

Re : purger un .gz

Les trois commandes du tube sont exécutées au même temps. Donc la première opération exécutées est la redirection dans la troisième commande ('gzip -f > $i') qui efface le contenu du fichier.

Utilise un fichier temporaire !


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#3 Le 16/10/2010, à 00:19

biotechman

Re : purger un .gz

Je voulais essayer de le faire en une ligne, mais bon...
Donc avec fichier temporaire, ça marche très bien et les résultats obtenus sont ceux attendus (j'ai fait des tests sur plusieurs fichiers)

#!/bin/bash
for i in $(ls access.log.*.gz);do
    zcat $i | sed "/192.168.1.10/d" > access.log.tmp
    cat access.log.tmp | gzip > $i
done
rm access.log.tmp

encore merci chopinhauer

Dernière modification par biotechman (Le 16/10/2010, à 00:19)


May the source be with you
http://biotechman.com/wordpress

Hors ligne

#4 Le 16/10/2010, à 00:25

chopinhauer

Re : purger un .gz

Sinon tu peux faire:

exec 3< "$i" && rm "$i"
zcat <&3 | "/192.168.1.10/d" | gzip -f > $i

mais bon, en cas d'erreur ce n'est pas très rassurant.

PS: pour information un fichier n'est pas détruit tant qu'une seule application a un file descriptor ouvert sur ce fichier.

PPS: et sputnick va surement te faire rentrer cette deuxième solution sur une seule ligne.

Dernière modification par chopinhauer (Le 16/10/2010, à 00:29)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#5 Le 16/10/2010, à 00:41

biotechman

Re : purger un .gz

aaaah, j'avais encore jamais vu d'application du canal 3
pour les messages d'erreur, rajouter un 2> /dev/null ou vers un fichier ne marcherais pas ?

Dernière modification par biotechman (Le 16/10/2010, à 00:42)


May the source be with you
http://biotechman.com/wordpress

Hors ligne

#6 Le 16/10/2010, à 00:50

chopinhauer

Re : purger un .gz

Le problème c'est plutôt que ton fichier de journal n'existe plus entre la première et deuxième ligne. Si le script est tué entretemps t'as perdu le journal. C'est pour cela que vaut mieux avoir deux copies du journal (avec un fichier temporaire) que aucune.

Pour ce qui concerne le canal 3, c'est le premier qui n'est pas utilisé, donc le choix est évident.


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne