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

Tarski
la source

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
Annika Backstrom
la source
(+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.

Chris_K
la source