Comment puis-je supprimer des fichiers dépassant une certaine date sur Linux


4

Parfois, j'extrais une archive dans le mauvais dossier et je voudrais déplacer ou supprimer les fichiers récemment extraits.

Quel est le moyen le plus simple de le faire via la ligne de commande? Puis-je en quelque sorte rechercher tous les fichiers plus récents que l'heure d'extraction et les rediriger vers rm?

Merci

Réponses:


12

Modifier: Comme indiqué dans les commentaires, tar modifie les paramètres mtime et ctime des fichiers extraits pour qu'ils correspondent aux dates de l'archive, de sorte que cette première méthode ne fonctionnera pas à moins que -m drapeau a été utilisé lors de l'extraction. La dernière méthode est optimale, mais peut entraîner la suppression des fichiers souhaités en cas de collision des noms de fichiers.

find soutient un -newer file flag, en spécifiant qu'il devrait trouver les fichiers plus récents que fichier . touch a un argument -t pour modifier le temps d'accès / de modification d'un fichier. Donc, pour réparer un problème rencontré autour de 19:25:30:

$ tar xzf whoops.tar.gz
$ touch -t 200909261925.30 whoops-timestamp
$ find . -newer whoops-timestamp

Et si vous êtes sûr que les bons fichiers sont affichés:

$ find . -newer whoops-timestamp -print0 | xargs -0 rm -v

Une alternative consiste à supprimer tous les fichiers répertoriés dans l'archive que vous venez d'extraire:

$ tar tfz whoops.tar.gz | xargs rm -v

(+1) La dernière option est la meilleure. C'est plus sûr et plus agréable que ce que le PO avait en tête.
nagul

question: tar ne fixerait-il pas l'heure modifiée à celle des fichiers d'origine? Ne trouveriez-vous pas utiliser le temps modifié (vs le temps de changement?) Lors de la comparaison?
ericslaw

Merci! J'ai utilisé la dernière façon de le faire. L’archive était en fait un zip, c’est pourquoi javascript est créé: xargs rm -v
Tarski

@ericslaw Yup, cela semble être le cas. tar conservera les dates des archives sauf si vous utilisez le -m drapeau. Donc, la première méthode ne fonctionnera pas en règle générale.
Annika Backstrom

2

Une autre alternative avec find:

$ find "/path/to_clean/" -type f -mtime +30 -print0 | xargs -0 rm -f

où +30 est le nombre de jours que vous souhaitez conserver.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.