Recherche de fichiers de plus de x jours sur un système avec une boîte occupée allégée

9

J'ai besoin de trouver et de supprimer des fichiers de plus d'une semaine dans l'unité de développement. Il existe un nombre limité d'utilitaires disponibles sur cet appareil. -mtime findLe prédicat de n'est pas disponible. Comment puis-je vérifier tous les fichiers qui datent de plus de x jours dans ce cas?

Ravi
la source
2
On ne sait pas exactement ce que vous entendez par « mtimen'est pas disponible». Ce n'est pas un utilitaire dont je reconnais le nom.
Kusalananda
/ chemin / vers / mon / dossier $ find -type f -mtime +7 delete find: non reconnu: -mtime
Ravi
partagez la distribution de linux que vous utilisez.
Siva
3
On dirait que c'est une boîte occupée construite sans FEATURE_FIND_MTIME. Est FEATURE_FIND_NEWERactivé? Ça find -newermarche? Votre testutilitaire ou le [support de votre shsupport -nt?
Stéphane Chazelas
1
Vous pouvez contourner cela si vous pouvez les utiliser touch -d/ date +%set[ file -nt other-file ]
Stéphane Chazelas

Réponses:

11

-mtimeest un prédicat standard de find(contrairement à -delete) mais il semble que vous ayez une version allégée de busybox, où la FEATURE_FIND_MTIMEfonctionnalité a été désactivée au moment de la construction.

Si vous pouvez reconstruire la busybox avec celle-ci activée, vous devriez pouvoir faire:

find . -mtime +6 -type f -exec rm -f {} +

Ou si FEATURE_FIND_DELETEest également activé:

find . -mtime +6 -type f -delete

Sinon, d'autres options pourraient être à utiliser find -newer(en supposant qu'il FEATURE_FIND_NEWERest activé) sur un fichier qui est défini pour avoir une heure de modification d'une semaine.

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -newer ../ref -exec rm -f {} +

Ou si -newern'est pas disponible , mais shest des [supports -nt:

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -exec sh -c '
    for f do
      [ "$f" -nt ../ref ] || printf "%s\0" "$f"
    done' sh {} + |
    xargs -0 rm -f
Stéphane Chazelas
la source
1
Oui, busybox était une version plus légère ici. Après la reconstruction, a find . -mtime +6 -type f -exec rm {} \;travaillé pour moi
Ravi
2

De man find:

-time n

Le dernier accès au fichier a eu lieu il y a n * 24 heures. Lorsque vous savez combien de périodes de 24 heures le fichier a été consulté pour la dernière fois, toute partie fractionnaire est ignorée.Par conséquent, pour correspondre à -atime +1, un fichier doit avoir été consulté il y a au moins deux jours.

-ctime n

Le statut du fichier a été modifié pour la dernière fois il y a n * 24 heures. Voir les commentaires de -atime pour comprendre comment l'arrondi affecte l'interprétation des temps de changement d'état des fichiers.

Selon les cas d'utilisation des fichiers que vous souhaitez supprimer, ce sont vos seules autres options pour find. Pourquoi n'est mtimepas disponible? Quel système de fichiers utilisez-vous? Avez-vous exploré d'autres options?

OneK
la source
Poser davantage de questions au PO devrait être une clarification des commentaires , pas des réponses .
Jeff Schaller