Script ménage fichiers anciens UNIX

Fermé
dift Messages postés 9 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 1 janvier 2011 - 10 déc. 2010 à 14:06
 dift - 11 déc. 2010 à 21:16
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
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
10 déc. 2010 à 14:40
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
dift Messages postés 9 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 1 janvier 2011
10 déc. 2010 à 17:52
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
10 déc. 2010 à 18:15
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
dift Messages postés 9 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 1 janvier 2011
10 déc. 2010 à 20:20
pourtant ce caractère ; n'est pas présent dans le script.
j'avoue ne pas comprendre pourquoi isoler ce caractère

merci
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 déc. 2010 à 10:21
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
11 déc. 2010 à 13:39
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