calculer l’espace disque total utilisé par les fichiers de plus de 180 jours à l’aide de find

J’essaie de trouver l’espace disque total utilisé par les fichiers de plus de 180 jours dans un répertoire particulier. C’est ce que j’utilise:

find . -mtime +180 -exec du -sh {} \; 

mais il est évident que ce qui précède me donne l’espace disque utilisé par chaque fichier trouvé. Je souhaite uniquement l’espace disque total ajouté utilisé par les fichiers. Cela peut-il être fait en utilisant la commande find et exec ?

S’il vous plaît noter que je ne veux tout simplement pas utiliser un script pour cela, ce sera génial s’il pourrait y avoir un seul paquebot pour cela. Toute aide est grandement appréciée.

@ PeterT a raison. Presque toutes ces réponses invoquent une commande (du) pour chaque fichier, ce qui demande beaucoup de ressources et est lent et inutile. Le moyen le plus simple et le plus rapide est le suivant:

 find . -type f -mtime +356 -printf '%s\n' | awk '{total=total+$1}END{print total/1024}' 

du ne résumerait pas si vous lui passez une liste de fichiers.

Au lieu de cela, conduisez la sortie pour cut et laisser awk résumer. Donc, vous pouvez dire:

 find . -mtime +180 -exec du -ks {} \; | cut -f1 | awk '{total=total+$1}END{print total/1024}' 

Notez que l’option -h pour afficher le résultat dans un format lisible par l’homme a été remplacée par -k ce qui équivaut à la taille de bloc de 1 Ko. Le résultat est présenté en Mo (voir total/1024 ci-dessus).

Pourquoi pas ça?

 find /path/to/search/in -mtime +180 -print0 | du -hc --files0-from - | tail -n 1 

La réponse précédente est intéressante, mais elle pose un problème: elle résume plusieurs fois la même utilisation du disque, car elle prend en compte l’utilisation du disque de répertoire.

Par exemple, j’ai beaucoup de fichiers dans mon ~/tmp :

 $ du -sh ~/tmp 3,7G /home/rpet/tmp 

En exécutant la première partie de l’exemple publié par devnull pour trouver les fichiers modifiés au cours des dernières 24 heures, nous pouvons voir que awk additionnera l’utilisation totale du ~/tmp :

 $ find ~/tmp -mtime 0 -exec du -ks {} \; | cut -f1 3849848 84 80 

Mais il n’y a qu’un seul fichier modifié pendant cette période, avec très peu d’utilisation du disque:

 $ find ~/tmp -mtime 0 /home/rpet/tmp /home/rpet/tmp/kk /home/rpet/tmp/kk/test.png $ du -sh ~/tmp/kk 84K /home/rpet/tmp/kk 

Nous devons donc prendre en compte uniquement les fichiers et exclure les répertoires:

 $ find ~/tmp -type f -mtime 0 -exec du -ks {} \; | cut -f1 | awk '{total=total+$1}END{print total/1024}' 0.078125 

Vous pouvez également spécifier des plages de dates à l’aide du paramètre -newermt . Par exemple:

 $ find . -type f -newermt "2014-01-01" ! -newermt "2014-06-01" 

Voir http://www.commandlinefu.com/commands/view/8721/find-files-in-a-date-range

Vous pouvez imprimer la taille du fichier à l’aide de l’option find utilisant l’option -printf , mais vous devez -printf awk .

Par exemple, taille totale de tous les fichiers de plus de 365 jours:

 find . -type f -mtime +356 -printf '%s\n' \ | awk '{a+=$1;} END {printf "%.1f GB\n", a/2**30;}'