53 votes

Calculer la taille des fichiers dans le shell

J'essaie de calculer la taille totale en octets de tous les fichiers (dans une arborescence de répertoires) correspondant à un modèle de nom de fichier en utilisant simplement le shell. Voici ce que j'ai jusqu'à présent :

find -name *.undo -exec stat -c%s {} \ ; | awk '{total += $1} END {print total}'

Y a-t-il un moyen plus facile de faire cela ? J'ai l'impression qu'il devrait y avoir un simple interrupteur qui fait cela pour moi, mais je n'en trouve pas.

Pour être clair, je veux totaliser les fichiers correspondant à un motif n'importe où dans une arborescence de répertoires, ce qui signifie que

du -bs *.undo

ne fonctionnera pas car il ne correspond qu'aux fichiers du répertoire courant.

95voto

tpgould Points 1114

Essayez :

find . -name "*.undo" -ls | awk '{total += $7} END {print total}'

Sur mon système, la taille du fichier est le septième champ de l'en-tête de fichier. find -ls sortie. Si votre find … -ls est différent, ajustez.

Dans cette version, l'utilisation des informations existantes sur les répertoires (taille des fichiers) et la fonction ls intégrée de find devraient être efficaces, en évitant les créations de processus ou les entrées/sorties de fichiers.

35voto

Chris AtLee Points 3656

Avec zsh, vous pouvez utiliser le globbing étendu pour faire :

du -c **/*.undo

22voto

user27478 Points 3660
find -name *.undo -print0 | du -hc --files0-from=-

18voto

Cantillon Points 931
du -c *pattern*

Ceci imprimera le total sur la dernière ligne de sortie.

9voto

T-Monster Points 81

Je me suis penché sur ce problème aussi (seulement un an plus tard...) - je viens seulement de trouver cette page.

Une méthode qui fonctionne (pour moi) est la suivante :

find /mnt/iso -name *.avi -printf "%s\n" | paste -sd+ - | bc

Ceci retournera la taille totale de tous les fichiers .avi dans tous les sous-dossiers sous /mnt/iso.

Je dois rendre hommage à radoulov pour la commande paste - voir cette page : Commande Linux pour additionner des entiers, un par ligne ?

Juste pour ajouter - juste au cas où un dossier correspond au terme de la recherche - c'est une bonne idée d'utiliser -type f dans la commande find aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X