Obtenir la taille avec du des fichiers seulement

51

Comment obtenir la taille de tous les fichiers et de tous les fichiers de ses sous-répertoires à l'aide de la commande du.

J'essaie la commande suivante pour obtenir la taille de tous les fichiers (et des fichiers des sous-répertoires)

find . -type f | du -a

Mais cela affiche également la taille des dossiers. Comment puis-je obtenir une liste des tailles de tous les fichiers et des fichiers des sous-répertoires? J'ai aussi essayé le exec flagmais je ne sais pas trop comment canaliser la sortie dans une autre commande après avoir exécuté les résultats de finddans du.

Le système d'exploitation est AIX 6.1 avec le shell ksh.

Shardul Upadhyay
la source

Réponses:

57

J'utilise habituellement l' -executilitaire. Comme ça:

find . -type f -exec du -a {} +

Je l'ai essayé à la fois sur bash et ksh avec GNU find. Je n'ai jamais essayé AIX, mais je suis sûr que votre version de find a une -execsyntaxe.

L'extrait suivant trie la liste, la plus grande en premier:

find . -type f -exec du -a {} + | sort -n -r | less
Rahmu
la source
3
J'irais avec cette réponse si vous n'avez pas accès à find -print0ou d'autres fonctionnalités de GNU. Si cette option est disponible, le remplacement de \;par \+entraînera moins d'appels duet donc de meilleures performances.
Jw013
Merci, cela fonctionne très bien d'autant que du propose un drapeau pour la taille en différentes unités.
Shardul Upadhyay
Je n'ai pas pu trouver d'informations sur l' +option. Est-ce une option pour duou pour find? Et pourquoi cela entraîne-t-il moins d'appels?
Amelio Vazquez-Reina
1
C'est une option standard de find. Il spécifie à execla commande (dans notre cas du) une seule fois, avec tous les résultats finddonnés sous forme d'arguments successifs à la commande.
Rahmu
wtf, pourquoi n'y a-t-il pas une commande du genredu -f --threshold=1G
Alexander Mills
16

Si vous avez des utilitaires GNU, essayez

find . -type f -print0 | du --files0-from=-
jw013
la source
La commande échoue en indiquant que print0 n'est pas une commande valide et que le dernier signe moins n'était pas un indicateur reconnu. Je ne pense pas que cette approche fonctionnera, car man duelle ne répertorie filesni fromindicateur ni indicateur.
Shardul Upadhyay
Vous devez ajouter votre système d'exploitation en tant que tag à la question. J'ai supposé que vous aviez GNU mais j'avais oublié de le mentionner.
Jw013
1
Avoir un vote positif sur moi! Votre solution particulière fonctionne avec du -chpour obtenir un grand total de fichiers correspondants:find . -name 'blah blah.*' -print0 | du --files0-from=- -ch
Michael Goldshteyn
9

J'utilise généralement:

find . -type f -print0 | xargs -r0 du -a

Xargs appelle généralement la commande, même si aucun argument n'a été passé. xargs du </dev/nullsera toujours appelé, xargs -r du </dev/nulln'appellera pas du. L' -0argument recherche des chaînes terminées par null au lieu de nouvelles lignes.

Ensuite, j'ajoute habituellement | awk '{sum+=$1} END {print sum}'la fin pour obtenir le total.

Arcege
la source
2
La then I usually addvaut de l'or :-)
Radek
2

Voici une version avec des noms de paramètres longs et un tri humain.

find . -type f -exec du --human {} + | sort --human --reverse | head

J'ai également vu pas besoin -a/--alld'être passé à du.

Tarrasch
la source
-2

fichiers spécifiques dans le répertoire en cours

du -ch files*

est plus court et fonctionne pour moi

du -sh .

pour le répertoire en cours et tous les fichiers en sous

du (coreutils GNU) 8.30

shorty
la source
1
(1) Qu'entendez-vous par du -ch files*? Supposons que le répertoire courant contient ant, apple, banana, bat, cat, corn, date, et dog, où les noms des animaux sont des sous - répertoires et les noms de fruits / légumes sont des fichiers - quelle commande voulez - vous utiliser pour obtenir seulement les fichiers? Ou n'est-ce pas ce que vous vouliez dire? (2)  du -sh .ne signalera qu'un total général de tout ce qui se trouve dans et sous le répertoire actuel, et pas les fichiers eux-mêmes. C’est à peu près le contraire de la question posée.
G-Man dit 'Réintégrez Monica' le