suppression en masse et rapide de fichier

suppression en masse et rapide de fichier - Divers - Linux et OS Alternatifs

Marsh Posté le 12-02-2010 à 13:47:03    

Bonjour tout le monde,
 
J'utilise pdumpfs pour journaliser une partie de mes backups sur disques. Ca fonctionne pas mal et me permet d'accéder rapidement aux sauvegardes sans devoir manipuler les bandes.  
 
Par contre, le nettoyage est problématique. Pas tant à cause de l'espace utilisé, mais plutôt au niveau de la quantité de fichiers à supprimer.   Je nettoie automatiquement j-30  chaque jour, par contre.  
 
Mais la commande rm -rf n'est pas très rapide. Il n'est pas rare que la suppression de fichiers prenne plusieurs jours. Il faut au serveur plusieurs heures avant de commencer à effectivement supprimer les fichiers. :/ Connaitriez-vous une alternative à la commande rm?  
 
Merci d'avance.

Reply

Marsh Posté le 12-02-2010 à 13:47:03   

Reply

Marsh Posté le 12-02-2010 à 13:55:44    

find . -ctime +30d -delete


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 12-02-2010 à 14:05:58    

j'ai déjà essayé ça, mais alors je rencontre un problème. Il efface bien les fichiers vieux de plus de 30 jours. Mais comme je sauvegarde les fichiers avec rsync en conservant les attributs et que pdumpfs conserve également les attributs, la commande  find efface également les fichiers dans les répertoires autres que j -30. :/
 
j'ai essayé en lui collant un 'type d' pour qu'il s'attaque au répertoire parent qui lui reçoit la date de création réelle, mais ça ne fonctionne pas.  
 
La commande find -delete serait parfaite si je parvenais à lui donner comme zone de rechercher le répertoire j -30. Ce qui donne pour ceux qui ne connaissent pas pdumpfs YYYY/MM/DD .
 
 
C'est surtout que je ne vois pas comment lui dire de chercher dans le répertoire.


Message édité par Hanka le 12-02-2010 à 14:12:04
Reply

Marsh Posté le 12-02-2010 à 14:09:17    

bah au lieu de . tu mets le répertoire voulu :spamafote:


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 12-02-2010 à 14:11:05    

disons que j'aurais voulu mettre ça dans un cron et ne plus m'en soucier. :)
 

Reply

Marsh Posté le 12-02-2010 à 14:11:57    

calcule la date à moins 30 jours et puis voila :spamafote:


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 12-02-2010 à 14:14:41    

Quelque chose comme ca dans ton crontab ?  
 
0 0 * * * root find /le/chemin/vers/le/dossier/j-30 -ctime +30d -delete
 
Pour lancer la commande tous les jours a minuit.


Message édité par kisscoolz le 12-02-2010 à 14:15:11
Reply

Marsh Posté le 12-02-2010 à 14:20:49    

black_lord a écrit :

calcule la date à moins 30 jours et puis voila :spamafote:


 
C'est quelque chose que je ne connais pas.  Je ne suis pas informaticien de formation. J'ai quelques connaissances qui me permettent d'assurer la maintenance des pc's de la pme pour laquelle je travaille, mais ce n'est pas ma fonction première.  
 
J'implémente des solutions linux car elles nous permettent de faire des économies et que pour la plupart de nos besoins (mails, ftp, etc..), c'est gratuit et bien documenté. Par contre, dès qu'il faut entrer  dans le code, je ne suis plus.


Message édité par Hanka le 12-02-2010 à 14:21:18
Reply

Marsh Posté le 12-02-2010 à 14:25:43    

pour l'avoir :


date --date='30 days ago' +%Y/%m/%d

 

à toi de la formatter comme tu veux ;)


Message édité par black_lord le 12-02-2010 à 14:26:46

---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 12-02-2010 à 14:28:22    

:jap:  Merci beaucoup.  

Reply

Marsh Posté le 12-02-2010 à 14:28:22   

Reply

Marsh Posté le 18-02-2010 à 09:57:21    

Je reviens vers vous car mon script semble ne pas fonctionner. :/  
 


#!/bin/bash
 
date=$(date --date='30 days ago' +%Y/%m/%d)
 
find /home/backups/datedbackups/$date -ctime +30 -delete

 
 
Alors que  si je remplace -delete par -exec ls {} \;
 
J'obtiens bien la liste des répertoires et fichiers  du répertoire 2010/01/19/  
 
J'ai essayé de remplacer le -delete par -exec rm -rf {} \; mais sans plus de succès.  
 
Une idée?
 
Petit détail, j'ai voulu utiliser la commande strace -p 3198  pour voir ce qui était effectivement fait par le script, mais j'obtiens la réponse suivante: Process 3198 attached - interrupt to quit

Message cité 1 fois
Message édité par Hanka le 18-02-2010 à 10:02:39
Reply

Marsh Posté le 18-02-2010 à 14:47:37    

Hanka a écrit :

Je reviens vers vous car mon script semble ne pas fonctionner. :/  
 


#!/bin/bash
 
date=$(date --date='30 days ago' +%Y/%m/%d)
 
find /home/backups/datedbackups/$date -ctime +30 -delete

 
 
Alors que  si je remplace -delete par -exec ls {} \;
 
J'obtiens bien la liste des répertoires et fichiers  du répertoire 2010/01/19/  
 
J'ai essayé de remplacer le -delete par -exec rm -rf {} \; mais sans plus de succès.  
 
Une idée?
 
Petit détail, j'ai voulu utiliser la commande strace -p 3198  pour voir ce qui était effectivement fait par le script, mais j'obtiens la réponse suivante: Process 3198 attached - interrupt to quit


C'est une bonne idee ca.
 
Comme ca si jamais ta fonction "date=$(date --date='30 days ago' +%Y/%m/%d)" ne retourne rien pour y ou x raisons, ca efface dans tous les repertoires (vu que tu ne fais pas de tests pour savoir si ta variable est vide ou non)

Reply

Marsh Posté le 18-02-2010 à 15:15:20    

Ce n'est pas faux.  
 

#!/bin/bash
 
date=$(date --date='30 days ago' +%Y/%m/%d)
 
if [ -n $date ]; then
find /home/backups/datedbackups/$date/* -exec ls {} \;
#find /home/backups/datedbackups/$date -type d -ctime +30 -delete
fi


 
Ceci te semble-t-il plus approprié?  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed