Solution
En fournissant l'option -c
(ou --total
) à du(1)
, vous pouvez lui demander de produire un total général. Si votre implémentation de du(1)
prend en charge l'une ou l'autre de ces options, vous pouvez obtenir l'effet souhaité à l'aide de la commande suivante :
$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +
MODIF : Notez que si le nombre de fichiers dépasse le nombre maximum de paramètres autorisés par votre système, find
peut toujours exécuter command
plusieurs fois. Quelques implémentations de du(1)
prend également en charge la lecture des noms de fichiers à partir d'un fichier, qui ne souffre pas de la limitation mentionnée :
$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames
Explication
La différence entre la sémantique de -exec command {} \;
et -exec command {} +
est le suivant :
-
command {} \;
exécutecommand
une fois pour chaque résultat defind
. Le chemin du résultat est passé à la place de{}
.$ touch 1 2 3 $ find 1 2 3 -maxdepth 0 -exec echo {} \; 1 2 3
-
command {} +
exécutecommand
, lorsque tous les résultats ont été récupérés. Les chemins des résultats sont passés à la place de{}
.$ touch 1 2 3 $ find 1 2 3 -maxdepth 0 -exec echo {} + 1 2 3
Le -print0
l'option provoque find(1)
pour imprimer les noms de fichiers trouvés sur la sortie standard séparés par le caractère nul et le --files0-from
l'option a causé du(1)
pour lire les noms de fichiers séparés par des valeurs nulles. Contrairement au caractère de nouvelle ligne, le caractère nul peut ne pas apparaître dans un nom de fichier, de sorte que la sortie est sans ambiguïté.
Pour en savoir plus sur les options de du(1)
et find(1)
, vous devriez consulter les pages de manuel respectives :
$ man du
$ man find
Essayez ceci :
du -c `find . -name 'flibble*' -ctime +90` | tail -1
La commande d'origine donne un argument à du, puis l'exécute jusqu'à ce qu'elle parcoure tous les arguments. De cette façon, vous lui donnez simplement tous les arguments à la fois, puis coupez les tailles séparées et ne laissez que le total. Vous pouvez supprimer le tuyau et la queue pour afficher la taille de chaque fichier si vous le souhaitez.
Vous pouvez essayer ceci :
find . -name 'flibble*' -ctime +90 -exec du -ch {} + | grep total