Jak określić całkowity rozmiar katalogu (folderu) z wiersza poleceń?


785

Czy istnieje proste polecenie, aby wyświetlić łączny rozmiar agregatu (użycie dysku) wszystkich plików w katalogu (folderze)?

Próbowałem tych i nie robią tego, co chcę:

  • ls -l, który wyświetla tylko rozmiar poszczególnych plików w katalogu, ani
  • df -h, która wyświetla tylko wolne i zajęte miejsce na moich dyskach.



Przyjazne przypomnienie, że może mieć niemal zerowy sens w systemie plików CoW, takim jak BTRFS.
val

Odpowiedzi:


1264

Polecenie du„podsumowuje użycie dysku dla każdego PLIKU, rekurencyjnie dla katalogów”, np.

du -hs /path/to/directory
  • -hjest uzyskanie liczb „czytelnych dla człowieka”, np. get 140Mzamiast 143260(rozmiar w kilobajtach)
  • -sjest podsumowaniem (w przeciwnym razie otrzymasz nie tylko rozmiar folderu, ale także osobno dla wszystkiego w folderze)

Podczas używania -hmożesz sortować wartości czytelne dla ludzi za pomocą

du -h | sort -h

-hFlaga na sortrozważy wartości Size „czytelny dla człowieka”.


Jeśli chcesz uniknąć rekurencyjnego wyświetlania wszystkich plików i katalogów, możesz podać --max-depthparametr, aby ograniczyć liczbę wyświetlanych elementów. Najczęściej,--max-depth=1

du -h --max-depth=1 /path/to/directory

9
szacunek dla pójścia o krok dalej. :)
myusuf3,

93
Używam du -shlub DOOSH jako sposobu, aby to zapamiętać (UWAGA: polecenie jest takie samo, tylko organizacja flag wiersza poleceń do celów pamięci)
Marco Ceppi

3
Istnieje przydatna opcja du o nazwie --apparent-size. Można go użyć do znalezienia rzeczywistego rozmiaru pliku lub katalogu (w przeciwieństwie do miejsca na dysku), np. Plik tekstowy zawierający zaledwie 4 znaki zajmie około 6 bajtów, ale nadal będzie wyświetlany jako zajmujący ~ 4K w regularne wyjście du -sh. Jeśli jednak przejdziesz opcję --apparent-size, wynikiem będzie 6. man du mówi: - pozorne rozmiary wydruku, a nie użycie dysku; chociaż pozorny rozmiar jest zwykle mniejszy, może być większy ze względu na dziury w plikach („rzadkich”), fragmentację wewnętrzną, bloki pośrednie
Hopping Bunny

4
Działa to również w systemie OS X! Dzięki, naprawdę szukałem sposobu na wyczyszczenie plików, zarówno na moim komputerze lokalnym, jak i na moim serwerze, ale zautomatyzowane metody wydawały się nie działać. Pobiegłem du -hs *więc do największego katalogu i dowiedziałem się, które pliki są tak duże ... To jest tak dobra metoda, a najlepsze jest to, że nie musisz niczego instalować! Zdecydowanie zasłużyłem na moją opinię
Dev

@BandaMuhammadAlHelal Myślę, że istnieją dwa powody: zaokrąglanie ( duma dość osobliwe zaokrąglenie, brak dziesiętnych, jeśli wartość ma więcej niż jedną cyfrę w wybranej jednostce) oraz klasyczny problem z prefiksem 1024 vs. 1000 . duma opcję -B(lub --block-size), aby zmienić jednostki, w których wyświetla wartości, lub możesz użyć -bzamiast -huzyskać „surową” wartość w bajtach.
Marcel Stimberg

164

Ostatnio znalazłem świetne, interaktywne narzędzie oparte na ncurses, które szybko daje przegląd rozmiarów katalogów. Przez lata szukałem tego rodzaju narzędzia.

  • szybko przejrzyj hierarchię plików
  • możesz usunąć np. ogromne pliki tymczasowe z narzędzia
  • ekstremalnie szybko

Pomyśl o tym jak o baobabie dla wiersza poleceń:

apt-get install ncdu

11
To jest absolutnie fantastyczne! Podobnie jak DaisyDisk, dla OSX
subZero

3
ncdujest niesamowite! Po zainstalowaniu, po prostu zrób to ncdu /. Bardzo szybko znajdziesz największe pliki w systemie. Naciśnij także hw interfejsie konsoli ncdu. Ma bardzo przydatne skróty
vlad-ardelean

Właśnie tego potrzebowałem: tak prosty, tak wydajny. Czysta miłość.
user3790897,

52

Znajduje rozmiar rekurencyjnie i umieszcza go obok nazwy każdego folderu, wraz z całkowitym rozmiarem na dole, wszystko w formacie ludzkim

du -hsc *


10

tree to kolejne przydatne polecenie dla tego zadania:

Wystarczy zainstalować za pomocą sudo apt-get install treei wpisz następujące polecenie:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

Z drzewa człowieka :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)

9

Poniżej jest to, czego używam do drukowania sumy, folderu i rozmiaru pliku:

$ du -sch /home/vivek/* | sort -rh

Detale

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Wynik

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

4

Odpowiedzi dały do ​​zrozumienia, że dujest to narzędzie do znalezienia całkowitego rozmiaru katalogu. Należy jednak wziąć pod uwagę kilka czynników:

  • Czasami dudane wyjściowe mogą wprowadzać w błąd, ponieważ zgłasza miejsce przydzielone przez system plików, które może różnić się od sumy rozmiarów poszczególnych plików. Zazwyczaj system plików przydziela 4096 bajtów dla pliku, nawet jeśli zapisałeś w nim tylko jeden znak!

  • Różnice wyjściowe wynikające z mocy 2 i mocy 10 jednostek. -hPrzełącznik do dudzieli liczbę bajtów o 2 ^ 10 (1024), 2 ^ 20 (1048576) itd otrzymując ludzkiego wyjście do odczytu. Wiele osób może być bardziej przyzwyczajonych do widzenia mocy 10 (np. 1K = 1000, 1M = 1000000) i być zaskoczonym wynikiem.

Aby znaleźć całkowitą sumę rozmiarów wszystkich plików w katalogu, w bajtach, wykonaj:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Przykład:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169

Find-ls-awk zwróci nieprawidłową wartość dla dużych folderów # 1 . Dla nowszych awk możesz dodać --bignumlub -M; jeśli nie jest to opcja, użyj find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 .
goozez

Jeśli problem stanowi użycie mocy 2, istnieje --siopcja: „jak -h, ale użyj mocy 1000, a nie 1024”
muru

1

Aby uzyskać tylko rozmiar katalogu w czytelnym formacie, użyj poniższego:

du -hs directoryname

Prawdopodobnie nie jest to poprawna sekcja, ale z wiersza poleceń możesz spróbować:

ls -sh filename

-sJest rozmiar i -hjest czytelny dla człowieka.

Użyj, -laby pokazać na lsliście, jak poniżej:

ls -shl

0

du /foldernameto standardowe polecenie określające rozmiar folderu. Najlepszą praktyką jest znajdowanie opcji, czytając stronę podręcznika:

man du

Przed użyciem polecenia należy przeczytać stronę podręcznika (dostępną online ).


0

Oto skrypt POSIX, który będzie działał z:

  • Plik
  • Akta
  • Katalog
  • Katalogi
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

Źródło


0

Jeśli żądany katalog ma wiele podkatalogów, użyj następujących opcji:

$ cd ~/your/target/directory
$ du -csh 

-c, --total tworzy sumę całkowitą
-s, - sumowanie wyświetla tylko sumę dla każdego argumentu
-h, - czytelne dla ludzi rozmiary wydruku w formacie czytelnym dla człowieka (np. 1K 234M 2G)

co wygenerowałoby ogólną sumę wykorzystania pamięci przez wszystkie pliki / foldery w bieżącym katalogu.


-1

Myślę, że najlepszy jest następujący:

du -h directory_name | tail -n1

To pokaże tylko rozmiar katalogu, który Cię interesuje i nie wydrukuje rozmiarów żadnych katalogów i plików w tym katalogu.

Powinienem dodać, że jeśli rozmiar folderu jest duży, to du zajmuje więcej czasu. Musisz być cierpliwy, aby to polecenie zadziałało. Tak jak w przypadku każdej innej komendy unix, możesz sprawdzić całkowity czas tego procesu, używając timeprzed tą komendą:

time du -h directory_name | tail -n1

6
duma taką opcję:-s
muru
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.