2010-07-11 17:26:29 +0000 2010-07-11 17:26:29 +0000
316
316

Hoe kom je aan de samengevatte grootte van mappen en hun submappen?

Laten we zeggen dat ik de grootte van elke map van een Linux-bestandssysteem wil krijgen. Als ik ls -la gebruik krijg ik niet echt de samengevatte grootte van de mappen.

Als ik df gebruik krijg ik de grootte van elk gemount bestandssysteem maar dat helpt me ook niet. En met du krijg ik de grootte van elke subdirectory en de samenvatting van het hele bestandssysteem.

Maar ik wil alleen de samengevatte grootte van elke map binnen de ROOT map van het bestandssysteem hebben. Is er een opdracht om dat te bereiken?

Antwoorden (9)

450
450
450
2010-07-11 17:28:23 +0000

Dit doet wat je zoekt:

du -sh /*

Wat dit betekent:

  • -s om alleen het totaal te geven voor elke opdrachtregel argument.
  • -h voor menselijk leesbare achtervoegsels zoals M voor megabytes en G voor gigabytes (optioneel).
  • /* breidt eenvoudigweg uit naar alle mappen (en bestanden) in /.

is ook handig om te sorteren op grootte:

du -sh /* | sort -h

Hier:

  • -h zorgt ervoor dat sort de menselijk leesbare achtervoegsels correct interpreteert.
84
84
84
2010-07-29 12:07:31 +0000

Ik moet vaak de grootste mappen vinden, dus om een gesorteerde lijst te krijgen met de 20 grootste dirs doe ik dit:

du -m /some/path | sort -nr | head -n 20

In dit geval worden de maten gerapporteerd in megabytes.

24
24
24
2015-12-24 10:07:52 +0000

Ik gebruik daarvoor graag Ncdu , je kunt de cursor gebruiken om te navigeren en naar beneden te boren door de mappenstructuur het werkt echt goed.

12
12
12
2012-11-22 16:53:04 +0000

De bestaande antwoorden zijn zeer nuttig, misschien dat sommige beginners (zoals ik) dit ook nuttig vinden.

  1. Zeer eenvoudige lus, maar voor mij was dit een goed begin voor een aantal andere grootte gerelateerde operaties:

    1. Zeer vergelijkbaar met het eerste antwoord en bijna hetzelfde resultaat als 1.), maar het kostte me wat tijd om het verschil te begrijpen tussen ME* en ME* als het in een subdirectory staat:
9
9
9
2010-07-11 17:29:10 +0000

De volgende du invocatie moet werken op BSD-systemen:

du -d 1 /
5
5
5
2015-07-24 11:04:13 +0000

Dit is niet gemakkelijk. Het du commando toont ofwel bestanden en mappen (standaard) of alleen de maten van alle items die je op de commandoregel opgeeft (optie -s).

Om de grootste items (bestanden en mappen), gesorteerd, met menselijk leesbare maten op Linux te krijgen:

du -h | sort -h

Dit zal je begraven in een ton aan kleine bestanden. Je kunt ze verwijderen met --threshold (1 MB in mijn voorbeeld):

du --threshold=1M -h | sort -h

Het voordeel van dit commando is dat het verborgen puntmapjes bevat (mappen die beginnen met .).

Als je echt alleen de mappen wilt gebruiken, moet je find gebruiken, maar dit kan erg, erg langzaam zijn omdat du veel mappen meerdere keren zal moeten scannen:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
2
2
2
2013-10-05 15:36:58 +0000

Wees je ervan bewust, dat je geen directories kunt vergelijken met du op verschillende systemen/machines zonder er zeker van te zijn, beide delen dezelfde blokgrootte van het bestandssysteem. Dit zou kunnen tellen als u enkele bestanden rsynchroniseert van een linux machine naar een nas en u wilt de gesynchroniseerde directory op uw eigen manier vergelijken. U zou verschillende resultaten kunnen krijgen met du vanwege verschillende blokgroottes….

1
1
1
2010-07-12 19:42:17 +0000

Misschien wilt u ook eens kijken naar xdiskusage . Geeft u dezelfde informatie, maar wordt grafisch weergegeven, en maakt het mogelijk om te boren (zeer nuttig). Er zijn andere soortgelijke programma’s voor KDE en zelfs voor Windows.

1
1
1
2016-12-20 09:56:34 +0000

Je zou ls kunnen gebruiken in combinatie met awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

De uitvoer van ls wordt naar awk geleid. awk begint met de verwerking van de gegevens. Standaard begrenzing is ruimte. De somvariabele tot wordt geïnitialiseerd naar nul; de volgende opgave wordt uitgevoerd voor elke rij/lijn die door ls wordt uitgevoerd. Het verhoogt slechts tot met de grootte. $5 staat voor de vijfde kolom (uitgevoerd door ls). Aan het eind delen we door (1024*1024) om te sommeren in megabytes.

Als je dit zou omzetten in een script of functie (.bashrc) kun je het ook gebruiken om de grootte van bepaalde subsets van directories te krijgen, volgens de filetypes.

Als je systeembrede informatie wilt, kan kdirstat van pas komen!