polecenie du nie analizuje ukrytych katalogów

25

Chcę oszacować ilość miejsca na dysku używanego przez katalog za pomocą następującego polecenia.

du -sh dir_name

który nie oblicza ukrytych katalogów. Na stronie podręcznika użytkownika du nie ma żadnych informacji na ten temat. Jak obliczyć ilość miejsca na dysku używanego przez katalogi, w tym ukryte pliki.

Talespin_Kit
źródło

Odpowiedzi:

13

Właściwie tak, oto dowód:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .

-aOpcja służy do wyraźnie pokazać, które pliki zostały policzone.

Używasz du *?

stivlo
źródło
3
+1 za... you maybe using "du *" ?
sehe
2
Nie używam „du *”. Zapomniałem wspomnieć w pytaniu, że potrzebuję podsumowania podsumowującego. więc jeśli użyję zarówno -a, jak i -s jak w du -as, pojawi się komunikat o błędzie „du: nie mogę zarówno podsumować, jak i wyświetlić wszystkich wpisów”. To jest jeden problem. Drugą rzeczą jest to, że nawet z du -ai widzę tylko pliki pierwszego poziomu. tzn. nie można zobaczyć plików w ukrytych katalogach.
Talespin_Kit
1
Właśnie dodałem -a, aby pokazać wszystkie zliczane pliki, po prostu nie dodawaj tej flagi, to wpływa tylko na wyświetlanie, a nie na sumy. Pokazałem ci kontrprzykład, że zamiast tego liczone są ukryte katalogi.
stivlo,
1
teraz znalazłem problem. Problem polegał na tym, że ukryty katalog był dowiązaniem symbolicznym, więc musiałem użyć „du -Lsh dir_name”. Dzięki.
Talespin_Kit
1
Ach, rozumiem, cieszę się, że to znalazłeś, na zdrowie.
stivlo,
53

To polecenie pokazuje podsumowany rozmiar ukrytych katalogów

du -hs .[^.]*

ecerutti
źródło
1
Właśnie tego szukałem, dzięki :)
Nikana Reklawyks
to jest właściwe rozwiązanie
3pn
byłoby wspaniale, gdybyś mógł trochę wyjaśnić magię, która się za tym kryje. pomogłoby to sformułować odpowiedź, która zawiera zarówno ukryte, jak i nie ukryte pliki i katalogi.
kumetix,
13

Prawidłowe polecenie to: du -hs $(ls -A)

$ du -hs $(ls -A)
0   test
0   .test

du -hs .* *, jak wspomniano w innej odpowiedzi, nie jest poprawne, jeśli chcesz wyświetlić listę wszystkich plików i podkatalogów (w tym ukrytych).

Przykład:

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..

Dlaczego tak się duzachowuje? Ponieważ używasz -stego podsumowując wynik i że wszystkie pliki i podkatalogi są potomkami, .więc du -hsich nie wymienia!

Guillaume Missonnier
źródło
11

FYI, do oszacowania wielkości zajmowanej przez różne katalogi, znacznie lepiej jest użyć ncdu

Możesz nawigować w GUI ncurses pomiędzy różnymi katalogami, a to pokaże rozmiar każdego z katalogów. Jeśli używam du, musiałbym wykonać polecenie du dla każdego katalogu, który chcę sprawdzić, który może być kłopotliwy. Możesz sortować katalogi według rozmiaru zajmowanego również w GUI ncurses.

Abhijeet Rastogi
źródło
1
Edytuj swoją odpowiedź, aby wskazać, dlaczego uważasz, że ncdu jest „znacznie lepszy”. Linkowana strona tak naprawdę nie mówi o tym nic poza tym, że jest to wersja oparta na ncurses du. Oprócz bardziej wyrafinowanej metody wyświetlania, nie ma oczywistych oznak jakichkolwiek różnic funkcjonalnych.
Dave Sherohman
Myślę, że możliwość dynamicznego dostosowania zapytania jest ogromną korzyścią. Mogę uruchomić ncdu na ~, dowiedzieć się, które katalogi zajmują najwięcej miejsca, a następnie nurkować bezpośrednio w nich. Daje również dpowiązanie do usunięcia katalogów, dzięki czemu można wyczyścić bezpośrednio z interfejsu.
user88974,
5

To robi i nie robi. Przykład:

W katalogu domowym: (istnieje tylko jeden użytkownik)

du -sh /home/*
2.6G    /home/user

w katalogu użytkownika: (ogromna różnica między sumami)

du -sh *
61M     bin
2.0M    dump-20130124104823.tar.gz
651M    public_html
472K    twitter-2.0.0.gem
11M     wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

a powodem jest:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/

du obliczy ukryte katalogi podczas schodzenia do podkatalogów, ale w bieżącym katalogu * po prostu nie pasuje do wzorca .directory_name, więc elementy ukryte w bieżącym katalogu zostaną pominięte.

Zajęło mi to trochę czasu i jak zalecił shadyabhi, byłoby oczywiste, gdybym użył ncdu.

bonyiii
źródło
1

Prawidłowe polecenie to: du -hs .* *

wróbel
źródło
Niektóre dodatkowe informacje sprawią, że będzie to akceptowalna odpowiedź.
Ramhound,
1

find -maxdepth 1 -exec du -sh "{}" \; | sort -h

To daje ci:

  • Rozmiar ukrytych plików / katalogów
  • Rozmiar nie ukrytych plików / katalogów
  • Wielki całkowity rozmiar bieżącego katalogu

Sortuje również dane wyjściowe, aby łatwo zobaczyć, co jest największe. Zrobiłem też alias w moim ~/.bash_aliasespliku.

alias big='find -maxdepth 1 -exec du -sh "{}" \; | sort -h'
alias sbig='sudo find -maxdepth 1 -exec du -sh "{}" \; | sort -h'

Teraz mogę po prostu wykonać, bigaby znaleźć największe katalogi w katalogu i sbigkiedy potrzebuję uprawnień sudo.

Mitchell Tracy
źródło
0
du -ahd1 | sort -hr | head -10

poniżej znajduje się opis -dopcji w du --help:

-d, --max-depth = N wypisuje sumę dla katalogu (lub pliku, z --all) tylko wtedy, gdy jest N lub mniej poziomów poniżej argumentu wiersza poleceń; --max-depth = 0 to to samo co --summarize

luochen1990
źródło
Chociaż może to pomóc w rozwiązaniu problemu, nie wyjaśnia, dlaczego i / lub jak rozwiązuje problem. Zapewnienie tego dodatkowego kontekstu znacznie poprawiłoby jego długoterminową wartość edukacyjną. Edytuj swoją odpowiedź, aby dodać wyjaśnienie, w tym jakie ograniczenia i założenia mają zastosowanie. Dzięki.
fixer1234
0

To polecenie pomoże ci sprawdzić użycie dysku, dostać się do katalogu i wykonać następujące czynności.
„du -sch. [!.] * * | sort -h”

Oto demonstracja sposobu obliczania zużycia dysku przez określony katalog. Utworzyłem katalog o nazwie Du_sh i utworzyłem w nim dwa pliki (jeden ukryty 10 MB i normalny 20 MB).

nikhil@debian:~$ mkdir Du_sh nikhil@debian:~$ cd Du_sh/ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=.10MB bs=1024 count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0299941 s, 350 MB/s nikhil@debian:~/Du_sh$ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=20MB bs=2048 count=10240 10240+0 records in 10240+0 records out 20971520 bytes (21 MB, 20 MiB) copied, 0.0342258 s, 613 MB/s nikhil@debian:~/Du_sh$ du -sch .[!.]* * 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$ du -sch .[!.]* * | sort -h 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$

Nix Nikhil
źródło