Ingen av standard Unix -traversalmetoderna (som `find`,` ls` eller `tree ') beräknar direkt den totala storleken på varje katalog i ett enda kommando. De visar vanligtvis storleken på filer i en katalog, men inte den rekursiva summan av storleken på alla filer och underkataloger i den katalogen.
För att beräkna den totala storleken på varje katalog skulle du vanligtvis använda `du` (diskanvändning). Men "du" inte i sig "går" i betydelsen att besöka varje katalog och skriva ut sitt namn och storlek separat. Den rapporterar storleken på varje katalog, *inklusive dess underkataloger *, som skiljer sig subtilt från en traversal som uttryckligen skulle lista varje katalog och dess storlek oberoende av sina barn.
Så här kan du uppnå en katalogövergång som visar den totala storleken på varje katalog:
med `du` med` find`:
Detta kombinerar "hitta" för traversal och "du" för storleksberäkning. "Hitta" listar varje katalog, och "xargs" matar dessa kataloger till "du":
`` `bash
hitta. -Typ d -print0 | xargs -0 -i {} du -sh {}
`` `
* `Hitta. -Typ d -print0`:Detta hittar alla kataloger (`-typ d`) från den aktuella katalogen (`. ') och skriver ut deras namn åtskilda av nolltecken (`-print0'). Nolltecken är avgörande för att hantera filnamn med mellanslag eller specialtecken.
* `xargs -0 -i {} du -sh {}`:Detta tar de nollseparerade filnamnen från `find` och kör` du -sh` på var och en. `-0` säger` xargs` att förvänta sig noll-separerade ingångar, `-i {}` uppsättningar `{}` som en platshållare för filnamnet, 'du -sh` visar storleken i ett mänskligt läsbart format (' -H ') och bara sammanfattningsstorleken (inte storleken på varje fil in i).
Detta är det närmaste du kommer till en traversal som uttryckligen ger dig storleken på varje katalog. Kommandot "du" är inte strikt en traversal algoritm, men när den används med "find" utför kombinationen önskad åtgärd.