2012-03-20 10 views
11

Próbuję uzyskać rozmiar katalogów o nazwie "bak" z find i du.Pobierz całkowity rozmiar folderów za pomocą find & du

to zrobić: find -name bak -type d -exec du -ch '{}' \;

ale zwraca wielkość dla każdego folderu o nazwie „bak” nie łącznie.

W każdym razie, aby je zdobyć? Dzięki :)

+0

Polecam używanie 'awk' aby obliczyć sumę końcową (z użyciem' 'du' bez -h') – Alex

+0

@Alex, dlaczego miałoby to być korzystne? –

Odpowiedz

16

użytkowania xargs(1) zamiast -exec:

find . -name bak -type d | xargs du -ch 

-exec wykonuje polecenie dla każdego pliku stwierdzono (sprawdzić dokumentację find(1)). Rurociągi do xargs pozwalają ci agregować te nazwy plików i uruchamiać tylko jeden raz: du. Można również zrobić:

find -name bak -type d -exec du -ch '{}' \; + 

Jeśli wersja find ją obsługuje.

+0

To działa! Pokaż całkowity rozmiar folderów. Dzięki – Piokaz

+1

To nie działa dla mnie na Ubuntu 12.04. Przekierowanie wyników tej sugestii do awk działa: awk '{sum + = 1 $} END {print sum}' – greggles

+3

Aby przyspieszyć proces, możesz dodać maksymalną głębokość, jeśli znasz strukturę katalogów, której szukasz: 'znajdź. -maxdepth 3 -type d -name bak | xargs du -ch --max-depth = 0' – ajpevers

3

Wypróbuj du -hcs. Z podręcznika:

-s, --summarize 
     display only a total for each argument 
+0

Ten sam problem, z opcją -s lub bez. – Piokaz

+1

Hmm, czy próbowałeś 'find -name bak -type d -exec du -ch {} +'? –

+0

Próbowałem, wygląda na to, że moja wersja find go nie obsługuje. – Piokaz

0

Kanał du z wynikami znalezisku:

du -shc $(find . -name bak -type d) 
Powiązane problemy