Shell script d'archivage de logs
LuffyyffuL
Messages postés
8
Statut
Membre
-
LuffyyffuL Messages postés 8 Statut Membre -
LuffyyffuL Messages postés 8 Statut Membre -
Bonjour,
J'essaie de faire un script me permettant d'archiver des fichiers .log se trouvant dans des dossiers "log".
Étant débutant dans ce domaine, je vais vous exposer tout ça en détail :
1 - Chercher dans une arborescence les dossiers "log",
2 - Dans chaque dossiers, compter le nombre de fichiers .log,
3 - Si les fichiers sont vieux de X jours, les compresser dans une archive,
4 - Déplacer l'archive vers une arborescence identique bis.
Exemple de l'arborescence :
/home/arbo1/dossier1/dossier2/log
Arborescence bis qui devra se créer :
/home/arbo2/dossier1/dossier2/log
Code :
.1 -
J'ai bien le chemin de mes dossiers "log" qui est retourné.
.2 -
Comment aller dans le path retourné des dossier logs ?
Sinon quand j'y vais à la main, j'ai bien le nombre de fichiers retourné.
.3 -
De ce côté, mes logs sont compressés un à un, alors que je veux une archive globale.
.4 -
Comment dire qu'on veut recréer l'arborescence principale dans un dossier source bis (arbo2/dossier1/dossier2/log) afin de déplacer cette archive dans le dossier log de l'arborescence bis ? Comment récupérer qu'une partie du path avec pwd ?
J'avais en tête de créer une fonction pour toutes ces étapes et de faire une boucle for pour chaque dossier "log" appeler cette fonction.
Merci d'avance
J'essaie de faire un script me permettant d'archiver des fichiers .log se trouvant dans des dossiers "log".
Étant débutant dans ce domaine, je vais vous exposer tout ça en détail :
1 - Chercher dans une arborescence les dossiers "log",
2 - Dans chaque dossiers, compter le nombre de fichiers .log,
3 - Si les fichiers sont vieux de X jours, les compresser dans une archive,
4 - Déplacer l'archive vers une arborescence identique bis.
Exemple de l'arborescence :
/home/arbo1/dossier1/dossier2/log
Arborescence bis qui devra se créer :
/home/arbo2/dossier1/dossier2/log
Code :
.1 -
find . -name log -type d -exec echo '{}' +
J'ai bien le chemin de mes dossiers "log" qui est retourné.
.2 -
ls -A | wc -l
Comment aller dans le path retourné des dossier logs ?
Sinon quand j'y vais à la main, j'ai bien le nombre de fichiers retourné.
.3 -
find *.log -mtime +30 -exec gzip log.tar {} \;
De ce côté, mes logs sont compressés un à un, alors que je veux une archive globale.
.4 -
mv *tar $ARCHIVE
Comment dire qu'on veut recréer l'arborescence principale dans un dossier source bis (arbo2/dossier1/dossier2/log) afin de déplacer cette archive dans le dossier log de l'arborescence bis ? Comment récupérer qu'une partie du path avec pwd ?
J'avais en tête de créer une fonction pour toutes ces étapes et de faire une boucle for pour chaque dossier "log" appeler cette fonction.
Merci d'avance
A voir également:
- Shell script d'archivage de logs
- Classic shell - Télécharger - Personnalisation
- View recovery logs - Guide
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
5 réponses
Salut.
Oui, en effet, j'ai fait de la merde à un moment donné. mais bon, je n'ai pas testé.
ensuite, à toi de modifier pour que ça fonctionne ou que ça fasse ce que tu veux.
Là tu aura une archive pour chaque dossier de log et chaque archive contiendra que les vieux log (normalement).
Oui, en effet, j'ai fait de la merde à un moment donné. mais bon, je n'ai pas testé.
for folder in $(find . -name log -type d )
do :
ls -A $folder| wc -l
for file in $(find $folder *.log -mtime +30)
do :
if [ -e $folder.tar.gz ]
then :
tar -Azf $folder.tar.gz $file
else
tar -czf $folder.tar.gz $file
fi
done
if [ -e $folder.tar.gz ]
then mv $folder.tar.gz somewhere
fi
done
ensuite, à toi de modifier pour que ça fonctionne ou que ça fasse ce que tu veux.
Là tu aura une archive pour chaque dossier de log et chaque archive contiendra que les vieux log (normalement).
salut.
une boucle for, ça me parait bien:
une boucle for, ça me parait bien:
for folder in $(find . -name log -type d )
do :
ls -A $folder| wc -l
tar -czf $folder.tar.gz $(find $folder *.log -mtime +30)
mv $folder.tar.gz somewhere
doneen gros, une base qui devrait fonctionner.
Ce script est pas mal, il permet de créer une archive du dossier "log" qui a des fichiers ".log" vieux de 30jours. Mais s'arrête dès qu'il a trouvé un dossier ayant de vieux ".log", s'il y a d'autres dossiers "log" avec de vieux ".log" il ne va pas les archiver.
Par contre s'il trouve un dossier "log" avec des ".log" trop récents, il passe bien au suivant.
Après ce que j'essaie de faire, ce n'est pas de compresser le dossier contenant une arborescence avec un dossier "log" et des fichiers ".log" vieux de X jours, mais de compresser les fichiers ".log" dans une archive.
Par contre s'il trouve un dossier "log" avec des ".log" trop récents, il passe bien au suivant.
Après ce que j'essaie de faire, ce n'est pas de compresser le dossier contenant une arborescence avec un dossier "log" et des fichiers ".log" vieux de X jours, mais de compresser les fichiers ".log" dans une archive.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je galère un peu ^^ j'ai pas compris entièrement ton script, mais j'ai fait ceci :
Il y des erreurs, et pourquoi "$folder/*.log" ne fonctionne pas ? Ai-je bien commenté ?
Il y des erreurs, et pourquoi "$folder/*.log" ne fonctionne pas ? Ai-je bien commenté ?
for folder in $(find . -name log -type d ) # Pour chaque dossiers "log" trouvé.
do :
for file in $(find $folder *.log -mtime +30) # Pour chaque dossier log contenant des fichiers ".log" vieux de +30jours.
do :
tar czf archive-log.tar.gz $folder/*.log # Archiver les fichiers ".log".
done
if [ -e $folder.tar.gz ] # Si une archive existe.
then mv *.tar.gz $ARCHIVE # Déplacer l'archive.
fi
done
for folder in $(find . -name log -type d ) # Pour chaque dossiers "log" trouvé.
do :
for file in $(find $folder *.log -mtime +30) # Pour chaque fichier".log" vieux de +30jours dans le dossier log.
do :
tar czf archive-log.tar.gz $folder/*.log # créer le fichier archive-log.tar.gz et ajouter tout les fichiers log de $folder
done
if [ -e $folder.tar.gz ] # Si une archive existe.
then mv $folder.tar.gz $ARCHIVE # Déplacer l'archive. ATTENTION $ folder peut contenir des sous dossiers
fi
done
J'ai compris que tu ne voulais archiver que les ".log" ayant plus de 30 jours.