web-dev-qa-db-fra.com

Obtenez la taille totale des dossiers avec find & du

J'essaie d'obtenir la taille des répertoires nommés "bak" avec find et du.

Je fais ça: find -name bak -type d -exec du -ch '{}' \;

Mais il renvoie la taille de chaque dossier nommé "bak" et non le total.

Quoi qu'il en soit pour les obtenir? Merci :)

19
Piokaz

Utilisez xargs(1) au lieu de -exec:

find . -name bak -type d | xargs du -ch

-exec exécute la commande pour chaque fichier trouvé (vérifiez le find(1) documentation). Piping to xargs vous permet d'agréger ces noms de fichiers et d'exécuter du une seule fois. Vous pouvez aussi faire:

find -name bak -type d -exec du -ch '{}' \; +

Si votre version de find le prend en charge.

22
Carl Norum

Essayez du -hcs. De la page de manuel:

 -s, --summarize
      display only a total for each argument
4
Lars Kotthoff

Feed du avec les résultats de find:

du -shc $(find . -name bak -type d)
1
rvrsd

S'il y a beaucoup de fichiers, -exec ... + peut être exécuté plusieurs fois et vous obtiendrez plusieurs sous-totaux.

Une alternative consiste à canaliser le résultat de find:

find . -name bak -type d -print0 | du -ch --files0-from=-
0
bitozoid