uzyskaj przybliżony rozmiar katalogu (rekurencyjnie włączając wszystkie pliki i podkatalogi)

10

Czy istnieje sposób szybkiego uzyskania dokładnego rozmiaru katalogu (w tym rekurencyjnie wszystkich jego podkatalogów)? Nie chcę rozmiarów podkatalogów, mam na myśli, że powinny one być rekurencyjnie uwzględnione w raportowanym rozmiarze całkowitym.

W przeciwnym razie sposób uzyskania przybliżonego rozmiaru? Myślę, że coś w tym kierunku dfpowoduje szybką odpowiedź dla całego systemu plików, ale tym razem dla konkretnego katalogu (i jego podkatalogów).

duWydaje się, że stosowane rozwiązania trwają wieki, gdy dany katalog zawiera tysiące podkatalogów.

Marcus Junius Brutus
źródło
Używanie dujest jedyną znaną mi metodą. Problem polega na tym, że dane są rozproszone w całej hierarchii, więc musi zostać zebrane przez narzędzie, aby uzyskać liczby.
slm

Odpowiedzi:

15

Uważam, że jest to całkiem przydatne.

du -sm Directory

lub uzyskać podział wewnętrznych katalogów

du -sm Directory/*

a potem z pewnym, jeśli ma wiele podkatalogów

du -sm Directory/* | sort -n 

Powodem, dla którego używam opcji -m, jest upewnienie się, że otrzymam wynik w megabajtach. Uważam, że łatwiej mi porównywać wizualnie (gdy nie otrzymuję mieszanki jednostek, np. Porównaj 999 KB i 1 MB w porównaniu z 999000 MB i 1000000 MB), dodatkową korzyścią jest to, że możesz przekazać dane wyjściowe do sortowania.

Umieść to wszystko w tle i przekieruj wyjście, zajmie to czasu jakiejkolwiek metody, której używasz, jest to przegląd wielu plików, które zajmą czas.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Zwróć uwagę na sortowanie odwrotne, aby duże były na początku. Dodaj to do uruchomienia crona co n minut.

Następnie z aliasem ducache masz dość aktualne wykorzystanie katalogu.

export alias ducache='head -n 15 ~/cacheDu.log'
X Tian
źródło
@X Tian zobacz mój komentarz do odpowiedzi glenn jackman
Marcus Junius Brutus
Zaakceptowano, dlatego używam -m i sortuję
X Tian
3
Pamiętaj shopt -s dotglob, w przeciwnym razie du -sm Directory/*nie będą liczyć ukrytych plików / katalogów.
Dmitrij Grigoryev,
@XTian przepraszam, ale nie byłem w stanie, więc niektóre polecenia proszę o pomoc.
Maveň ツ
Mam go stąd
Maveň ツ
5
du -sh "$dir"

da ci podsumowanie całkowitego rozmiaru w sformatowanym „ludzkim” wyniku.


Ponieważ szukałeś alternatywy dla du, próbowałem find, ale jest dokładnie tak samo:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .
Glenn Jackman
źródło
Dzięki, zdaję sobie z tego sprawę, ale duzajmuje dużo czasu, ponieważ daje dokładny wynik. Miałem nadzieję na narzędzie / polecenie, które zapewni szybką i brudną przybliżoną odpowiedź.
Marcus Junius Brutus
Jest, dfale działa to na cały system plików.
glenn jackman
1

Może ci się nie podobać moja odpowiedź, ale myślę, że najlepszym sposobem na robienie tego, co chcesz, jest regularne uruchamianie „du -s” w tle za pomocą crona i zapisywanie wyniku w pliku. Następnie, jeśli chcesz uzyskać przybliżoną wartość, użyj wartości z pliku. Ty decydujesz, jak często prowadzić du. Nie widzę szybszego sposobu uzyskania wartości. Command du jest wydajny w tym, co robi.

Jedynym innym sposobem, w jaki możesz to zrobić bardzo szybko, jest utworzenie systemu plików dla katalogu, a następnie df szybko dostanie odpowiedź, którą chcesz.

Jeśli szybciej jest wiedzieć wszystko w systemie plików oprócz katalogu, możesz uruchomić df dla systemu plików, du dla wszystkiego innego niż katalog i odjąć.

Robert Jacobs
źródło
0

Nie pasuje dokładnie do twoich potrzeb (nie drukuje się w jednym wierszu), ale jest łatwiejszy niż inne rozwiązania:

du -a -h | sort -hr | head -2

To polecenie podaje rozmiar katalogu i podkatalogu oraz rozmiar największego pliku lub podkatalogu w bieżącym katalogu.

PS: Jest head -2tak w przypadku, gdy podkatalog zajmuje całe miejsce bieżącego katalogu i nasłuchuje przed bieżącym.

Nodulaire
źródło