Assurez-vous que votre pwd est le bon répertoire pour supprimer les fichiers puis (en supposant que seuls des caractères réguliers dans le nom de fichier) :
ls -A1t | tail -n +11 | xargs rm
conserve les 10 fichiers les plus récents. Je l'utilise avec le programme de caméra 'motion' pour conserver les fichiers de capture d'image les plus récents. Merci à toutes les réponses car vous m'avez montré comment faire.
find
est l'outil commun pour ce genre de tâche :
find ./my_dir -mtime +10 -type f -delete
EXPLICATIONS
./my_dir
votre répertoire (remplacez par le vôtre)-mtime +10
plus de 10 jours-type f
uniquement les fichiers-delete
pas de surprise. Retirez-le pour tester votrefind
filtrer avant d'exécuter toute la commande
Et veillez à ce que ./my_dir
existe pour éviter les mauvaises surprises !
La bonne façon de faire ce genre de chose est avec logrotate
.
Essayez ceci :
ls -t | sed -e '1,10d' | xargs -d '\n' rm
Cela devrait gérer tous les caractères (sauf les nouvelles lignes) dans un nom de fichier.
Que se passe-t-il ici ?
ls -t
répertorie tous les fichiers du répertoire courant par ordre décroissant d'heure de modification. C'est-à-dire que les fichiers les plus récemment modifiés sont les premiers, un nom de fichier par ligne.sed -e '1,10d'
supprime les 10 premières lignes, c'est-à-dire les 10 fichiers les plus récents. J'utilise ceci au lieu detail
parce que je ne me souviens jamais si j'ai besoin detail -n +10
outail -n +11
.xargs -d '\n' rm
collecte chaque ligne d'entrée (sans la nouvelle ligne de fin) et passe chaque ligne comme argument àrm
.
Comme pour tout ce genre, veuillez expérimenter dans un endroit sûr.