Supprimer des fichiers de plus de 10 jours en utilisant le script shell dans Unix [dupliquer]

cette question a déjà une réponse ici:

je suis nouveau dans les scripts shell, quelqu'un peut-il m'aider? Je veux supprimer des scripts dans un dossier à partir 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 sera exécuté tous les 10 jours avec Crontab, c'est pourquoi j'ai besoin de la date courante.

99
demandé sur Morgan Thrapp 2012-11-21 12:46:13

3 réponses

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

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

explications

  • ./my_dir de votre répertoire (à remplacer par votre propre)
  • -mtime +10 plus de 10 jours
  • -type f seuls les fichiers
  • -delete pas de surprise. retirez-le pour tester votre filtre find avant d'exécuter le toute la commande

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

327
répondu Gilles Quenot 2016-10-10 18:01:32

il suffit d'épiler le script shell pour supprimer les fichiers plus anciens

#!/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 autres choses.

  • fichiers de log nommé avec un timestamp
  • dossier log spécifié
  • trouver recherche *.fichiers txt uniquement dans le dossier log
  • 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é...
12
répondu MarcoZen 2013-07-26 12:30:51

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

find -mmin +14400 -delete
4
répondu glglgl 2012-11-21 08:50:18