[résolu]Problème commande find (Unix Shell)

Développement, conception de sites web, PHP, (X)HTML, ASP, Ajax, CSS, Javascript, Flash, MySQL, et autres ont leurs entrées dans cette section. On peut aussi parler d'hébergement, de maintenance, de sécurité...

Modérateur: Modérateurs

[résolu]Problème commande find (Unix Shell)

Messagepar alien6390 » 13 Avr 2015 10:35

Bonjour à tous,

Dans le cadre d'un projet de virtualisation, j'ai mis en place un script permettant d'effectuer des backups de machines virtuelles.
Les machines virtuelles sont sauvegardées dans un dossier NFS sur le réseau. Une commande à la fin du script permet de vérifier la présence de dossiers de sauvegarde plus vieux de 6 jours et de les éliminer. Chaque jours la commande devrait trouver 3 dossiers à éliminer (3 versions de backup de 3 machines virtuelles).
Malheureusement, cette commande fonctionne à moitié: exécutée, elle trouve le premier "vieux" dossier, l'élimine et s'arrête là! Je me retrouve donc chaque fois avec 2 versions de backup plus vieux de 6 jours et cela ne fait qu'augmenter avec le temps.
J'espère m'être bien expliqué.
Voici la commande présente dans le script:

Code: Tout sélectionner
find $DESTINATION_BACKUP -type d -mtime +6 -exec rm -rf {} \;


Je vous remercie d'avance de votre aide.
Dernière édition par alien6390 le 14 Avr 2015 09:17, édité 1 fois.
Avatar de l’utilisateur
alien6390
Libellulien
Libellulien
 
Messages: 62
Inscription: 21 Aoû 2012 13:36

Re: Problème commande find (Unix Shell)

Messagepar diavolezza » 13 Avr 2015 12:42

hello
est ce que la commande suivante affiche les 3 répertoires ou s'arrête aussi ?
Code: Tout sélectionner
find $DESTINATION_BACKUP -type d -mtime +6 -ls
Avatar de l’utilisateur
diavolezza
Super Libellulien
Super Libellulien
 
Messages: 1341
Inscription: 15 Sep 2005 13:49
Localisation: virtuelle

Re: Problème commande find (Unix Shell)

Messagepar alien6390 » 13 Avr 2015 12:56

En utilisant -ls cela ne fonctionne pas, j'utilise donc -print à la place et effectivement cela m'affiche tous les vieux dossiers destinés à être effacer. La commande ne s’arrête donc pas.
Avatar de l’utilisateur
alien6390
Libellulien
Libellulien
 
Messages: 62
Inscription: 21 Aoû 2012 13:36

Re: Problème commande find (Unix Shell)

Messagepar diavolezza » 13 Avr 2015 14:00

par défaut, find parcourt toute l'arborescence et va donc tester chaque sous répertoire
essayer en ajoutant -maxdepth 0 pour qu'il ne teste que les répertoires dans $DESTINATION_BACKUP sans descendre, si tel est le but ?
Avatar de l’utilisateur
diavolezza
Super Libellulien
Super Libellulien
 
Messages: 1341
Inscription: 15 Sep 2005 13:49
Localisation: virtuelle

Re: Problème commande find (Unix Shell)

Messagepar alien6390 » 13 Avr 2015 15:55

Apparemment, le problème se situe au niveau de la commande rm. En ajoutant le paramètre "-maxdepth 0" la commande ne marche pas, par contre si je modifie en "-maxdepth 1", une erreur m'est retournée mais je ne saisi pas le sens:
Code: Tout sélectionner
/vmfs/volumes/c4c4b524-531083fa/test # find -type d -maxdepth 1 -mtime +6 -exec rm -rf {} \;
find: ./Citron2015-03-30: No such file or directory
rm: invalid option --
BusyBox v1.9.1-VMware-visor-klnext-8021 (2011-10-21 17:03:36 PDT) multi-call binary
 
Usage: rm [OPTION]... FILE...
 
Remove (unlink) the FILE(s). You may use '--' to
indicate that all following arguments are non-options.
 
Options:
        -i      Always prompt before removing each destination
        -f      Remove existing destinations, never prompt
        -r,-R   Remove the contents of directories recursively
 
rm: invalid option -- u
BusyBox v1.9.1-VMware-visor-klnext-8021 (2011-10-21 17:03:36 PDT) multi-call binary
 
Usage: rm [OPTION]... FILE...
 
Remove (unlink) the FILE(s). You may use '--' to
indicate that all following arguments are non-options.
 
Options:
        -i      Always prompt before removing each destination
        -f      Remove existing destinations, never prompt
        -r,-R   Remove the contents of directories recursively
 
rm: invalid option -- 3
BusyBox v1.9.1-VMware-visor-klnext-8021 (2011-10-21 17:03:36 PDT) multi-call binary
 
Usage: rm [OPTION]... FILE...
 
Remove (unlink) the FILE(s). You may use '--' to
indicate that all following arguments are non-options.
 
Options:
        -i      Always prompt before removing each destination
        -f      Remove existing destinations, never prompt
        -r,-R   Remove the contents of directories recursively


J'observe bien qu'il élimine le premier dossier (find: ./Citron2015-03-30: No such file or directory) mais après me retourne une erreur.
Merci de ta patience.
Avatar de l’utilisateur
alien6390
Libellulien
Libellulien
 
Messages: 62
Inscription: 21 Aoû 2012 13:36

Re: Problème commande find (Unix Shell)

Messagepar diavolezza » 14 Avr 2015 08:00

éviter de faire des tests avec rm -rf ... c'est plus que dangerereux
cette commande affiche-t-elle les bons répertoires à supprimmer ?
Code: Tout sélectionner
find $DESTINATION_BACKUP -maxdepth 0 -type d -mtime +6 -print
Avatar de l’utilisateur
diavolezza
Super Libellulien
Super Libellulien
 
Messages: 1341
Inscription: 15 Sep 2005 13:49
Localisation: virtuelle

Re: Problème commande find (Unix Shell)

Messagepar alien6390 » 14 Avr 2015 09:16

Trouvé!
Le find n'est pas proprement géré sur ce shell et pose des problèmes avec l'utilisation du paramètre -exec.
Voici la solution qui marche à merveille (j'en remercie une connaissance :D):
Code: Tout sélectionner
find $DESTINATION_BACKUP -type d -mtime +6 | xargs rm –rf

Je te remercie pour ton aide
Avatar de l’utilisateur
alien6390
Libellulien
Libellulien
 
Messages: 62
Inscription: 21 Aoû 2012 13:36

Re: [résolu]Problème commande find (Unix Shell)

Messagepar diavolezza » 14 Avr 2015 12:51

je suggère l'utilisation de maxdepth si il faut détruire tout le répertoire
Avatar de l’utilisateur
diavolezza
Super Libellulien
Super Libellulien
 
Messages: 1341
Inscription: 15 Sep 2005 13:49
Localisation: virtuelle


Retourner vers Développement, conception de sites web

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
cron