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_dirvotre répertoire (remplacez par le vôtre)-mtime +10plus de 10 jours-type funiquement les fichiers-deletepas de surprise. Retirez-le pour tester votrefindfiltrer 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 -tré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 detailparce que je ne me souviens jamais si j'ai besoin detail -n +10outail -n +11.xargs -d '\n' rmcollecte 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.