Je fais cette tâche régulièrement et j'utilise des variantes des éléments suivants. Il s'agit d'un pipeline combinant divers outils simples: recherchez tous les fichiers, ajoutez l'heure de modification des fichiers, triez, supprimez l'heure de modification des fichiers, affichez toutes les lignes sauf les 500 premières et supprimez-les:
find foo/ -type f | perl -wple 'printf "%12u ", (stat)[9]' | \
sort -r | cut -c14- | tail -n +501 | \
while read file; do rm -f -- "$file"; done
Quelques commentaires:
Si vous utilisez "bash", vous devez utiliser "read -r file", pas seulement "read file".
L'utilisation de "perl" pour supprimer les fichiers est plus rapide (et gère également les caractères "bizarres" dans les noms de fichiers mieux que la boucle while, sauf si vous utilisez "read -r file"):
... | tail -n +501 | perl -wnle 'unlink() or warn "$_: unlink failed: $!\n"'
Certaines versions de «tail» ne prennent pas en charge l'option «-n», vous devez donc utiliser «tail +501». Une façon portable de sauter les 500 premières lignes est
... | perl -wnle 'print if $. > 500' | ...
Cela ne fonctionnera pas si vos noms de fichiers contiennent des retours à la ligne.
Il ne nécessite pas de recherche GNU.
La combinaison de ce qui précède vous donne:
find foo/ -type f | perl -wple 'printf "%12u ", (stat)[9]' | \
sort -r | cut -c14- | perl -wnle 'print if $. > 500' | \
perl -wnle 'unlink() or warn "$_: unlink failed: $!\n"'
Peter John Acklam
la source
rm -f
cependant.C'est ainsi que je le ferais en Python 3. qui devrait également fonctionner pour d'autres systèmes d'exploitation. Après avoir testé cela, assurez-vous de décommenter la ligne qui supprime réellement les fichiers.
la source
Je ne connais pas les "500 plus récents", mais avec find, vous pouvez supprimer des éléments vieux de X minutes / jours. Exemple pour fichier et plus de 2 jours:
Testez d'abord avec:
Faites attention aux barres obliques inverses et à l'espace avant "\;". Consultez la page de manuel find pour plus d'informations.
la source
si vous pouviez conserver les fichiers vieux de x jours / heures au lieu du plus récent numéro x, vous pouvez le faire simplement avec
tmpwatch --ctime 7d
la source
Je pense que le
-mtime
et les-newer
options defind
commande sont utiles pour vous. Vous pouvez voirman find
pour plus d'informations.la source
pourquoi ne pas utiliser ce code plus simple:
la source