Zwiększanie rozmiaru tylko dla du plików


51

Jak mogę uzyskać rozmiar wszystkich plików i wszystkich plików w podkatalogach za pomocą polecenia du.

Próbuję następujące polecenie, aby uzyskać rozmiar wszystkich plików (i plików w podkatalogach)

find . -type f | du -a

Ale to również drukuje rozmiary folderów. Jak mogę uzyskać listę rozmiarów wszystkich plików i plików w podkatalogach? Próbowałem również, exec flagale nie jestem pewien, jak potokować dane wyjściowe do innego polecenia po wykonaniu wyników findw du.

System operacyjny to AIX 6.1 z powłoką ksh.

Odpowiedzi:


57

Zwykle używam tego -execnarzędzia. Lubię to:

find . -type f -exec du -a {} +

Próbowałem go zarówno na bash, jak i ksh z GNU find. Nigdy nie próbowałem systemu AIX, ale jestem pewien, że twoja wersja find ma pewną -execskładnię.

Poniższy fragment kodu sortuje listę, najpierw największy:

find . -type f -exec du -a {} + | sort -n -r | less

3
Postawiłbym tę odpowiedź, jeśli nie masz dostępu find -print0lub innych funkcji GNU. Jeśli to możliwe, zastąpienie \;go \+spowoduje mniej wywołań, dua tym samym lepszą wydajność.
jw013,

Dzięki, działa to świetnie, zwłaszcza że du oferuje flagę wielkości w różnych jednostkach.
Shardul Upadhyay

Nie mogłem znaleźć informacji na temat +opcji. Czy to jest opcja dla duczy dla find? I dlaczego powoduje to mniej połączeń?
Amelio Vazquez-Reina,

1
Jest to standardowa opcja find. Określa execpolecenie (w naszym przypadku du) tylko raz, z wszystkimi wynikami findpodanymi jako kolejne argumenty polecenia.
rahmu

wtf, dlaczego nie ma takiego polecenia jakdu -f --threshold=1G
Alexander Mills,

16

Jeśli masz narzędzia GNU, spróbuj

find . -type f -print0 | du --files0-from=-

Komenda nie powie, że print0 nie jest prawidłową komendą, a ten ostatni minus nie był rozpoznaną flagą. Nie sądzę, aby to podejście zadziałało, ponieważ man dunie wyświetla flagi filesani fromflagi.
Shardul Upadhyay

Powinieneś dodać swój system operacyjny jako znacznik do pytania. Zakładałem, że masz GNU, ale zapomniałeś o tym wspomnieć.
jw013,

1
Głosuj na mnie! Twoje konkretne rozwiązanie działa z tym, du -chaby uzyskać całkowitą liczbę pasujących plików:find . -name 'blah blah.*' -print0 | du --files0-from=- -ch
Michael Goldshteyn

9

Ogólnie używam:

find . -type f -print0 | xargs -r0 du -a

Xargs zwykle wywołuje polecenie, nawet jeśli nie przekazano żadnych argumentów; xargs du </dev/nullnadal będzie nazywany, xargs -r du </dev/nullnie będzie dzwonił du. Te -0spojrzenia argument za znakiem NUL łańcuchów zamiast nowej linii zakończone.

Następnie zazwyczaj dodam | awk '{sum+=$1} END {print sum}'na końcu, aby uzyskać sumę.


2
Wartość then I usually addzłota :-)
Radek

2

Oto wersja z długimi nazwami parametrów i ludzkim sortowaniem.

find . -type f -exec du --human {} + | sort --human --reverse | head

Nie widziałem też potrzeby -a/--allprzekazywania du.


-2

określone pliki w bieżącym reż

du -ch files*

jest krótszy i działa dla mnie

du -sh .

dla aktualnego katalogu i wszystkich plików w sub

du (GNU coreutils) 8.30


1
(1) Co masz na myśli du -ch files*? Załóżmy, że aktualny katalog zawiera ant, apple, banana, bat, cat, corn, date, i dog, gdzie nazwy zwierząt są podkatalogi i owoców / warzyw są nazwy plików - co komenda należałoby użyć, aby uzyskać tylko te pliki? A może nie to miałeś na myśli? (2)  du -sh .zgłasza tylko wielką sumę wszystkiego w bieżącym katalogu i pod nim, a nie same pliki w ogóle. Jest to prawie dokładne przeciwieństwo tego, o które pytano.
G-Man mówi „Reinstate Monica”
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.