155 votes

Supprimer les fichiers de plus de 10 jours en utilisant le script shell script sous Unix

Je suis novice en matière de scripts, quelqu'un peut-il m'aider ? Je veux supprimer les scripts dans un dossier à partir de la date actuelle jusqu'à 10 jours. Le scripts ressemble à :

2012.11.21.09_33_52.script
2012.11.21.09_33_56.script
2012.11.21.09_33_59.script

Le script sera exécuté tous les 10 jours avec Crontab, c'est pourquoi j'ai besoin de la date actuelle.

496voto

sputnick Points 31663

find est l'outil commun pour ce type de tâche :

find ./my_dir -mtime +10 -type f -delete

EXPLICATIONS

  • ./my_dir votre répertoire (à remplacer par le vôtre)
  • -mtime +10 plus de 10 jours
  • -type f uniquement les fichiers
  • -delete pas de surprise. Retirez-le pour tester votre find filtre avant d'exécuter la commande entière

Et veillez à ce que ./my_dir existe pour éviter les mauvaises surprises !

20voto

MarcoZen Points 564

J'épice juste le shell script ci-dessus pour supprimer les fichiers plus anciens mais avec journalisation et calcul du temps écoulé.

#!/bin/bash

path="/data/backuplog/"
timestamp=$(date +%Y%m%d_%H%M%S)    
filename=log_$timestamp.txt    
log=$path$filename
days=7

START_TIME=$(date +%s)

find $path -maxdepth 1 -name "*.txt"  -type f -mtime +$days  -print -delete >> $log

echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> $log

... code for backup ...or any other operation .... >> $log

END_TIME=$(date +%s)

ELAPSED_TIME=$(( $END_TIME - $START_TIME ))

echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> $log
echo "Elapsed Time ::  $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) "  >> $log

Le code ajoute quelques éléments.

  • fichiers journaux nommés avec un horodatage
  • dossier de journal spécifié
  • find recherche les fichiers *.txt uniquement dans le dossier des journaux.
  • le type f vous assure de ne supprimer que les fichiers
  • maxdepth 1 vous assure de ne pas entrer dans les sous-dossiers.
  • les fichiers journaux de plus de 7 jours sont supprimés (en supposant qu'il s'agit d'un journal de sauvegarde).
  • note l'heure de début / fin
  • calcule le temps écoulé pour l'opération de sauvegarde...

Nota pour tester le code, utilisez simplement -print au lieu de -print -delete. Mais vérifiez bien votre chemin d'accès.

Nota : Assurez-vous que l'heure de votre serveur est correctement réglée via la date - configurez le fuseau horaire/ntp correctement. Vérifiez également l'heure des fichiers avec 'stat filename'.

Nota mtime peut être remplacé par mmin pour un meilleur contrôle car mtime ignore toutes les fractions (plus vieux que 2 jours (+2 jours) signifie en fait 3 jours) lorsqu'il s'agit d'obtenir les horodatages des fichiers dans le contexte des jours

-mtime +$days  --->  -mmin  +$((60*24*$days))

9voto

glglgl Points 35668

Si vous pouvez vous permettre de travailler via les données du fichier, vous pouvez faire

find -mmin +14400 -delete

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X