J'écris un script bash qui doit supprimer les anciens fichiers.
Il est actuellement implémenté en utilisant:
find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete
Cela supprimera les fichiers de plus d'un jour.
Cependant, que se passe-t-il si j'ai besoin d'une résolution plus fine ce jour-là, disons 6 heures? Existe-t-il un moyen simple de le faire, comme il y a l'utilisation de find et -mtime?
$LOCATION
et$REQUIRED_FILES
puissent tous les deux avoir plusieurs valeurs telles quedir1 dir2
et*.txt *.tmp
?Vous pouvez utiliser cette astuce: créez un fichier il y a 1 heure et utilisez l'
-newer file
argument.(Ou utilisez
touch -t
pour créer un tel fichier).la source
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
Crée un fichier datanttest
toujours d'une heure.Voici l'approche qui a fonctionné pour moi (et je ne la vois pas utilisée ci-dessus)
supprimer tous les fichiers datant de plus de 59 minutes tout en laissant les dossiers intacts.
la source
'*.*'
utiliser des guillemets simples ou le shell l'étendra aux noms de fichiers réels au lieu de le conserver comme caractère générique pourfind
le résoudre. Cela interromptfind
l'opération récursive sur les sous-répertoires.-name '*.*'
ne sera pas supprimer des fichiers sans extension, tels queREADME
,Makefile
, etc.Pour SunOS 5.10
la source
-mmin correspond à des minutes.
Essayez de consulter la page de manuel.
pour plus de types.
la source
Si vous n'avez pas "-mmin" dans votre version de "find", alors "-mtime -0.041667" est assez proche de "dans la dernière heure", donc dans votre cas, utilisez:
donc, si X signifie 6 heures, alors:
fonctionne parce que 24 heures * 0,25 = 6 heures
la source
Voici ce que l'on peut faire pour continuer comme @iconoclast s'interrogeait dans son commentaire sur une autre réponse.
utilisez crontab pour l'utilisateur ou
/etc/crontab
pour créer un fichier/tmp/hour
:puis utilisez ceci pour exécuter votre commande:
la source
*/1
for hourly est redondant dans votre crontab. C'est la même chose que de mettre * dans le champ des heures.find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;
la source
Si on
find
n'a pas-mmin
et si on est aussi coincé avec unfind
qui n'accepte que des valeurs entières pour-mtime
, alors tout n'est pas nécessairement perdu si l'on considère que "plus ancien que" est similaire à "pas plus récent que".Si nous avons pu créer un fichier qui a un mtime de notre heure limite, nous pouvons demander
find
à localiser les fichiers qui ne sont "pas plus récents que" notre fichier de référence.Créer un fichier avec l'horodatage correct est un peu compliqué car un système qui ne dispose pas d'un
find
a probablement aussi moins que capable dedate
commande qui pourrait faire des choses comme:date +%Y%m%d%H%M%S -d "6 hours ago"
.Heureusement, d'autres anciens outils peuvent gérer cela, bien que de manière plus lourde.
Considérez que six heures correspondent à 21600 secondes. Nous voulons trouver l'heure d'il y a six heures dans un format utile:
L'instruction perl a produit une date utile, mais elle doit être mieux utilisée:
Maintenant, la solution pour cet ancien UNIX est quelque chose du genre:
Cela peut aussi être une bonne idée de nettoyer notre fichier de référence ...
la source