Script ménage fichiers anciens UNIX

Fermé
Signaler
Messages postés
9
Date d'inscription
samedi 29 mars 2008
Statut
Membre
Dernière intervention
1 janvier 2011
-
 dift -
Bonjour,

Je souhaite créer un script unix qui permettrait de faire du ménage ds des répertoires spécifiques.

J'aimerai choisir une date à partir de laquelle le script supprimerai les fichiers.

merci beaucoup

cela m'aiderai bcp


config unix aix

2 réponses

Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 586
Salut,

Sous réserve ne sachant pas si la commande find sous AIX accepte tous les paramètres...

L'idée créer un fichier de référence à la date voulu (ici 1er aout 2010 12h00) :

touch -t 201008012000 toto

Puis lancer une recherche sur les fichiers d'un répertoire donné et de ses sous répertoires, avec comme condition que ce soit des fichiers (-type f) pas plus récent (-newer exprimé par la négation '!') que le fichier de référence. Ce qui donne :

find /chemin ! -newer toto -type f 

Qui devrait t'afficher les fichiers en question. Si c'est bon il suffira de rajouter la commande de suppression :

find /chemin ! -newer toto -type f -exec rm -f {} \;
0
Messages postés
9
Date d'inscription
samedi 29 mars 2008
Statut
Membre
Dernière intervention
1 janvier 2011

merci pour votre réponse

c'est exactement ce dont j'ai besoin.

Par contre, je ne comprends pas très bien la syntaxe.

Je suis débutant sous unix.

notamment la commande -exec

je pense qu'elle signifie execution de la suite du script
0
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 586
En fait elle exécute la commande du shell qui est placée juste après (rm dans ton cas).
Commande "rm" qui prend en argument chaque occurrence de fichier correspondant à la recherche, occurrence représentée par "{}".
On achève la commande "find" par "\;" (ici on est obligé d'échapper le caractère ";" parce que c'est un caractère aussi utilisé par le shell, afin qu'il ne soit pas interprété par le dit shell).
0
Messages postés
9
Date d'inscription
samedi 29 mars 2008
Statut
Membre
Dernière intervention
1 janvier 2011

pourtant ce caractère ; n'est pas présent dans le script.
j'avoue ne pas comprendre pourquoi isoler ce caractère

merci
0
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 586
Parce que il fait partie intégrale de la syntaxe de "find", du moins du paramètre "-exec". Si on ne l'échappe pas, il sera interprété par le shell et de ce fait la commande find retournera une erreur :

find: Paramètre manquant pour « -exec »


Extrait du man :
-exec commande ;
    Exécute la commande ; vrai si le code de retour 0 est renvoyé. Tous les arguments suivants de find sont considérés comme des arguments pour la ligne de commande, jusqu'à ce qu'on rencontre un ';'. La chaîne '{}' est remplacée par le nom du fichier en cours de traitement, et ceci dans toutes ses occurrences, pas seulement aux endroits où elle est isolée, comme c'est le cas avec d'autres versions de find. Ces deux chaînes peuvent avoir besoin d'être protégées du développement de la ligne de commande par le shell, en utilisant le caractère d'échappement ('\') ou une protection par des apostrophes. La commande est exécutée depuis le répertoire de départ. 
0
ok
J'ai compris le principe.
merci beaucoup

Désolé si j'abuse mais si je souhaite mettre cela sous forme d'un script.
Comment dois-je m'y prendre?

L'idée, une fois le script lancé, serait de ne rentrer que la date sous le format que vous m'avez indiqué.
Je dois créer une variable, je présume, remplaçant la date de référence.

Bien cordialement,
0
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 586
Il suffit de passer un paramètre au script depuis la ligne de commande sous la forme AnnéeMoisJourHeureMinute (Ex : 201001010001) et de passer ce paramètre à la commande "touch" :

touch -t "$1" toto
0