207 votes

Supprimer tous les, mais le plus récent X-files en bash

Est-il une façon simple, dans un joli environnement standard UNIX avec bash, pour exécuter une commande pour supprimer tous les, mais le plus récent X les fichiers d'un répertoire?

Pour donner un peu plus d'un exemple concret, imaginez un cron job d'écriture d'un fichier (par exemple, un fichier journal ou un tar-ed de la sauvegarde) pour un répertoire de toutes les heures. Je voudrais un moyen d'avoir une autre tâche cron exécute ce qui permettrait de supprimer les anciens fichiers dans ce répertoire jusqu'à ce qu'il y a moins de, disons, 5.

Et juste pour être clair, il n'y a qu'un fichier présent, il ne doit jamais être supprimé.

123voto

Espo Points 24318

Retirez tous les 5 (ou quel que soit le nombre) de la plus récente des fichiers dans un répertoire.

rm `ls -t | awk 'NR>5'`

89voto

thelsdj Points 3344
(ls -t|head -n 5;ls)|sort|uniq -u|xargs rm

Cette version prend en charge les noms avec des espaces:

(ls -t|head -n 5;ls)|sort|uniq -u|sed -e 's,.*,"&",g'|xargs rm

71voto

Fabien Points 1161

Variante plus simple de thelsdj de réponse:

ls -tr | head -n -5 | xargs rm

ls -tr affiche tous les fichiers, les plus anciens en premier (-t plus récent-r inverse).

head-n -5 affiche toutes les mais les 5 dernières lignes (c'est à dire les 5 plus récents fichiers).

xargs rm appels rm pour chaque fichier sélectionné.

19voto

wnoise Points 6448
find . -maxdepth 1 -type f -printf '%T@ %p\0' | sort -r -z -n | awk 'BEGIN { RS="\0"; ORS="\0"; FS="" } NR > 5 { sub("^[0-9]*(.[0-9]*)? ", ""); print }' | xargs -0 rm -f

Nécessite GNU trouver pour printf, et GNU tri-z, et GNU awk pour le "\0", et GNU xargs -0 pour, mais les poignées de fichiers intégré avec des retours à la ligne ou des espaces.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X