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.