web-dev-qa-db-fra.com

Obtenir la taille avec des fichiers uniquement

Comment puis-je obtenir la taille de tous les fichiers et de tous les fichiers dans 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 dans les sous-répertoires)

find . -type f | du -a

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

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

56
Shardul Upadhyay

J'utilise habituellement le -exec utilitaire. 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 un -exec syntaxe.

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

find . -type f -exec du -a {} + | sort -n -r | less
60
rahmu

Si vous disposez des utilitaires GNU, essayez

find . -type f -print0 | du --files0-from=-
16
jw013

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'est passé; xargs du </dev/null Sera toujours appelé, xargs -r du </dev/null N'appellera pas du. L'argument -0 Recherche des chaînes terminées par null au lieu de terminaison de nouvelle ligne.

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

9
Arcege

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

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

Je n'ai également vu aucun besoin de -a/--all à transmettre à du.

2
Tarrasch