Stwierdziłem, że nie jest łatwo uzyskać sposób, w jaki rozmiar katalogu w Bash?
Chcę, aby kiedy piszę ls -<some options>
, mógł wyświetlić wszystkie sumy rozmiaru pliku katalogu i plików w tym samym czasie i sortować według rozmiaru.
Czy to jest możliwe?
du
jest odpowiedź.du
polecenie szacuje użycie przestrzeni plików, więc nie możesz go użyć, jeśli chcesz uzyskać dokładny rozmiar.du
(przynajmniej wersja GNU coreutils) prawdopodobnie ma opcję dostarczenia informacji.Odpowiedzi:
Po prostu przejdź do katalogu i uruchom następujące polecenie:
LUB dodaj -h dla rozmiarów czytelnych dla człowieka i -r, aby najpierw wypisać większe katalogi / pliki.
źródło
du -h
wymagasort -h
również, aby to zapewnić, powiedzmy,981M
wcześniej1.3G
; zsort -n
tylko numery byłyby brane pod uwagę, a oni być niewłaściwy sposób okrągłe.-a
i używać--all
zamiast--max-depth=1
takdu -a -h --all | sort -h
sort -h
działa tylko na wersji GNU / Linuksie, nie ma szczęścia z BSD / OS X.Najwyraźniej
--max-depth
opcji nie ma w wersjidu
polecenia w systemie Mac OS X. Zamiast tego możesz użyć następujących.du -h -d 1 | sort -n
źródło
(to nie pokaże ukrytych plików (.dotfiles))
Użyj
du -sm
dla jednostek Mb itp. Zawsze używamponieważ suma line (
-c
) znajdzie się na dole z oczywistych powodów :)PS:
źródło
du --max-depth=1|sort -n
lubfind . -mindepth 1 -maxdepth 1|xargs du -s|sort -n
do dołączania plików dotfiles.find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 du -s | sort -n
jeśli niektóre ze znalezionych ścieżek mogą zawierać spacje.sudo du -smch * | sort -h | tail
Komenda
Wynik
Wyjaśnienie
du
wyświetla "użycie dysku"h
oznacza „czytelne dla człowieka” (zarówno w sortowaniu, jak i w du)max-depth=0
oznacza,du
że nie pokaże rozmiarów podfolderów (usuń to, jeśli chcesz pokazać wszystkie rozmiary każdego pliku w każdym pod-, pod-, ..., folderze)r
jest dla "odwrócenia" (najpierw największy plik)ncdu
Kiedy przyszedłem do tego pytania, chciałem wyczyścić mój system plików. Narzędzie wiersza poleceń
ncdu
jest o wiele lepiej dostosowane do tego zadania.Instalacja na Ubuntu:
Stosowanie:
Wystarczy wpisać
ncdu [path]
w linii poleceń. Po kilku sekundach na analizę ścieżki zobaczysz coś takiego:Usuń aktualnie podświetlony element za pomocą d, zakończ za pomocą CTRL+c
źródło
ls -S
sortuje według rozmiaru. Następnie, aby wyświetlić również rozmiar,ls -lS
wyświetla długi (-l
), posortowany według rozmiaru (-S
). I zazwyczaj dodać-h
też, aby ułatwić czytać, takls -lhS
.źródło
du
, wygląda na to, że ktoś to opublikował. @sehe: Zależy od Twojej definicji rzeczywistego - pokazuje ilość miejsca, jaką katalog wykorzystuje do przechowywania. (Nie chodzi tylko o dodanie rozmiaru pozycji podrzędnych). Nie jest to liczba losowa i nie zawsze wynosi 4 KB.Prosto i szybko:
* wymaga GNU Parallel .
źródło
Myślę, że mogłem się domyślić, co chcesz zrobić. To da posortowaną listę wszystkich plików i wszystkich katalogów, posortowaną według rozmiaru pliku i rozmiaru zawartości w katalogach.
źródło
du
było opcją, da ci tylko przybliżony wynik.[wersja rozszerzona]
Będzie to znacznie szybsze i precyzyjniejsze niż początkowa wersja poniżej i zwróci sumę całego rozmiaru pliku w bieżącym katalogu:
stat -c %s
komenda w pliku powróci jego rozmiar w bajtach.tr
Komenda tutaj służy do przezwyciężeniaxargs
ograniczeń Command (widocznie rurociągów naxargs
to wyniki przecinania na więcej wierszy, łamiąc logiki mojego polecenia). Dlategotr
zadbano o zastąpienie wysuwu linii+
znakiem (plus).sed
ma jedyny cel, aby usunąć ostatni+
znak z otrzymanego ciągu, aby uniknąć narzekań ze strony końcowegobc
(podstawowego kalkulatora) polecenia, które jak zwykle wykonuje obliczenia.Wydajność: Przetestowałem to na kilku katalogach i ponad ~ 150.000 plików na górze (obecna liczba plików w moim pudełku Fedory 15), co moim zdaniem jest niesamowitym wynikiem:
Na wypadek, gdybyś chciał dokonać porównania z
du -sb /
poleceniem, wyświetli szacunkowe użycie dysku w bajtach (-b
opcja)Tak jak się spodziewałem, jest on nieco większy niż moje obliczenia polecenia, ponieważ
du
narzędzie zwraca przydzielone miejsce dla każdego pliku, a nie rzeczywiste zajęte miejsce.[wersja początkowa]
Nie możesz użyć
du
polecenia, jeśli chcesz znać dokładny sumaryczny rozmiar folderu, ponieważ (zgodnie z cytatem ze strony podręcznika)du
szacuje użycie przestrzeni plików. W związku z tym doprowadzi cię do złego wyniku, przybliżenia (być może zbliżonego do wielkości sumy, ale najprawdopodobniej większego niż rzeczywisty rozmiar, którego szukasz).Myślę, że można odpowiedzieć na twoje pytanie na różne sposoby, ale to jest moje:
Znajduje wszystkie pliki w. katalog (zmień. na dowolny katalog), dołączane są również pliki ukryte i (używając
xargs
) wypisuje ich nazwy w jednej linii, a następnie tworzy szczegółową listę za pomocąls -l
. Ten (czasami) ogromny wynik jest przesyłany potokiem do polecenia cut, a tylko piąte pole (-f5
), które określa rozmiar pliku w bajtach, jest pobierane i ponownie przesyłane potokowo,xargs
co ponownie tworzy pojedynczą linię rozmiarów oddzielonych spacjami. Teraz wykonaj magię sed, która zastępuje każdą spację znakiem plus (+
), a na końcubc
(podstawowy kalkulator) wykonuje obliczenia.Może wymagać dodatkowego dostrojenia, a
ls
polecenie może narzekać na zbyt długą listę argumentów.źródło
Kolejne proste rozwiązanie.
wynik będzie wyglądał
zmiana „du -s” na „du -sh” pokaże rozmiar czytelny dla człowieka, ale nie będziemy mogli sortować w tej metodzie.
źródło
możesz użyć poniższego, aby wyświetlić listę plików według rozmiaru du -h | sort -hr | więcej lub du -h --max-depth = 0 * | sort -hr | więcej
źródło
Zwykle używam du w prosty sposób.
To daje mi wyobrażenie o tym, które katalogi zajmują najwięcej miejsca. Później mogę przeprowadzić dokładniejsze wyszukiwania.
źródło