web-dev-qa-db-fra.com

Supprimer les fichiers de plus de 10 jours à l'aide d'un script shell sous Unix

Je suis nouveau dans les scripts Shell, quelqu'un peut-il aider? Je veux supprimer des scripts dans un dossier de la date actuelle à 10 jours. Les scripts ressemblent à:

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

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

119
Steve88

find est l'outil habituel pour ce genre 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 des fichiers
  • -delete pas de surprise. Supprimez-le pour tester votre filtre find avant d'exécuter la commande entière

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

402
Gilles Quenot

Il suffit de pimenter le script Shell pour supprimer les anciens fichiers

#!/bin/bash

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

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

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

START_TIME=$(date +%s)

... code for backup ...or any other operation ....


END_TIME=$(date +%s)

ELAPSED_TIME=$(expr $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 construit sur la réponse de sputnick et ajoute quelques éléments supplémentaires.

  • les fichiers journaux nommés avec un horodatage
  • dossier de log spécifié
  • find recherche les fichiers * .txt uniquement dans le dossier de journal
  • les fichiers journaux de plus de 7 jours sont supprimés (en supposant qu'il s'agisse d'un journal de sauvegarde)
  • note l'heure de début/fin
  • calcule le temps écoulé ...
15
MarcoZen

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

find -mmin +14400 -delete
6
glglgl