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.

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 *?


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 .[^.]*


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!


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.


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.


1

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


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.


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


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$

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.