Bonjour à tous
Voila dans le cadre d'une purge de fichier pdf, je dois réaliser un script de nettoyage. Jusque la pas de problème mais je rencontre des difficultés.
Contexte:
J'ai une arborescence de plusieurs dossiers nommées numériquement de 1 à 500. Dans ces dossiers, il y a différents sous dossiers contenant des fichiers PDF.
But:
Réaliser sur les dossiers de plus de 60 jours, la suppression des différents sous-dossiers, en gardant un exemplaire du sous-dossier le plus vieux.
Pourriez-vous m'aider s'il vous plait ?
Un grand merci.
```
# lire le cours ?
Posté par NeoX . Évalué à 6.
ca ressemble fort à un exercice de cours.
et comme ca rapidement, je dirais qu'il te faut utiliser find pour trouver :
- les dossiers
- de plus de 60jours
- effacer le contenu du dossier qu'on vient de trouver
[^] # Re: lire le cours ?
Posté par totof2000 . Évalué à 1.
voir les options -mtime -type et exec
# Script de purge
Posté par Mataio97 . Évalué à 1.
Merci d'avoir pris le temps de me répondre, j'ai oublier de mettre la commande que j'utilise pour cela:
find /mon_chemin/ -maxdepth 1 -type d -name '[0-9][0-9][0-9]' -mtime +60 | while read folder; do echo "Traitement du dossier:"$folder; cd $folder/; ls -tr | head -n2 | xargs tar cvf archive.tar; done
Elle fonctionne bien, mais manque la partie pour supprimer les sous-dossiers et je vois pas trop comment l'incorporer dans ma commande.
Je suis un peu perdu :(
[^] # Re: Script de purge
Posté par NeoX . Évalué à 3. Dernière modification le 02 mars 2016 à 18:00.
peut-etre faut-il ecrire le script de maniere plus conventionnelle
on voit alors que ton script :
- cherche
find
- dans l'emplacement
/mon_chemin/
- avec 1 sous dossier
-maxdepth 1
- les dossiers
-type d
- dont le nom
-name
est composé de 3 chiffres[0-9][0-9][0-9]
- et dont la modification remonte à plus de 60jours
-mtime +60
pour chaque dossier
while read folder
tu rentres dedans
cd $folder
tu listes son contenu
ls -tr
tu prends les 2 premieres lignes
head -n2
(attention ce ne sont pas forcement les plus ancien car l'affichage de fait en colonne)tu donnes les 2 lignes à xargs pour qu'il fasse une archive.
et bien pour ta suppression, qu'est-ce qui t'empeche de faire en plus un
ls -lr | head -n2 | xargs rm
?[^] # Re: Script de purge
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Dans le
| xargs tar cvf
, la commandexargs
peut lancer plusieurs fois untar cvf
et chaque lancement écrase le fichier précédemment produit.# Suite Purge
Posté par Mataio97 . Évalué à 1. Dernière modification le 02 mars 2016 à 19:55.
Merci pour vos réponses:
Je bloque pour la suppression, car je ne vois pas comment dire à rm de supprimer tous les sous-dossiers hormis l'archive (archive.tar) precedemment crée.
Le xargs sera exécuté dans des dossiers differents du fait que l'on soit dans une boucle.Je ne vois pas comment il ppourra ecraser une archive deja existant.
Prenons 2 dossiers 400 et 500, dans un premier temps il va rentrer dans le dossier 400, va faire un tar des 2 premiers fichiers, puis va passer au dossier 500 et faire un autre tar et ainsi de suite.
Ca se passe comme cela normalement?
[^] # Re: Suite Purge
Posté par NeoX . Évalué à 3.
ben en faisant un rm des memes dossiers que tu as mis dans l'archive,
donc en utilisant la meme methode, probablement
ls -tr | head -n2 | xargs rm
# Script purge
Posté par Mataio97 . Évalué à 1.
Imaginons que dans le dossier 500, il y ait une soixantaine de sous-dossiers, je prends les deux premiers dossiers et fait une archive dessus.
Cependant en lancant le rm, je n'effacerai que les deux premiers dossiers, alors que je souhaite effacer tous les sous dossiers et laisser seulement l'archive.
[^] # Re: Script purge
Posté par NeoX . Évalué à 2.
donc en gros tu sauvegardes les 2 premiers, et tu effaces les autres ?
donc tu perds des données ?
# script purge
Posté par Mataio97 . Évalué à 1.
Personne peut m'aider
UP merci
# Script purge
Posté par Mataio97 . Évalué à 1. Dernière modification le 08 mars 2016 à 20:11.
Bon j'ai finalement trouver la solution à mon problème.
je mets le code au cas ou cela pour etre utile pour d'autre.
Merci à tous.
[^] # Re: Script purge
Posté par NeoX . Évalué à 2.
je persiste à dire que ton script est bizarre.
si tu as 50 fichiers dans le dossier, tu ne prend que les 2 premieres lignes de
ls -tr
que tu mets dans l'archiveet tu effaces les autres ?
si les fichiers ont des noms numeriques, tu peux remplacer ton
find $folder/* ! -name 'archive.tar' -exec rm -rf '{}' \;
par un
rm -rf [0-9]*
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.