[wersja rozszerzona]
Będzie to znacznie szybsze i precyzyjniejsze niż początkowa wersja poniżej i zwróci sumę całego rozmiaru pliku w bieżącym katalogu:
echo `find . -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
stat -c %skomenda w pliku powróci jego rozmiar w bajtach. trKomenda tutaj służy do przezwyciężenia xargsograniczeń Command (widocznie rurociągów na xargsto wyniki przecinania na więcej wierszy, łamiąc logiki mojego polecenia). Dlatego trzadbano o zastąpienie wysuwu linii +znakiem (plus). sedma jedyny cel, aby usunąć ostatni +znak z otrzymanego ciągu, aby uniknąć narzekań ze strony końcowego bc(podstawowego kalkulatora) polecenia, które jak zwykle wykonuje obliczenia.
Wydajność: Przetestowałem to na kilku katalogach i ponad ~ 150.000 plików na górze (obecna liczba plików w moim pudełku Fedory 15), co moim zdaniem jest niesamowitym wynikiem:
# time echo `find / -type f -exec stat -c %s {} \; | tr '\n' '+' | sed 's/+$//g'` | bc
12671767700
real 2m19.164s
user 0m2.039s
sys 0m14.850s
Na wypadek, gdybyś chciał dokonać porównania z du -sb /poleceniem, wyświetli szacunkowe użycie dysku w bajtach ( -bopcja)
# du -sb /
12684646920 /
Tak jak się spodziewałem, jest on nieco większy niż moje obliczenia polecenia, ponieważ dunarzędzie zwraca przydzielone miejsce dla każdego pliku, a nie rzeczywiste zajęte miejsce.
[wersja początkowa]
Nie możesz użyć dupolecenia, jeśli chcesz znać dokładny sumaryczny rozmiar folderu, ponieważ (zgodnie z cytatem ze strony podręcznika) duszacuje użycie przestrzeni plików. W związku z tym doprowadzi cię do złego wyniku, przybliżenia (być może zbliżonego do wielkości sumy, ale najprawdopodobniej większego niż rzeczywisty rozmiar, którego szukasz).
Myślę, że można odpowiedzieć na twoje pytanie na różne sposoby, ale to jest moje:
ls -l $(find . -type f | xargs) | cut -d" " -f5 | xargs | sed 's/\ /+/g'| bc
Znajduje wszystkie pliki w. katalog (zmień. na dowolny katalog), dołączane są również pliki ukryte i (używając xargs) wypisuje ich nazwy w jednej linii, a następnie tworzy szczegółową listę za pomocą ls -l. Ten (czasami) ogromny wynik jest przesyłany potokiem do polecenia cut, a tylko piąte pole ( -f5), które określa rozmiar pliku w bajtach, jest pobierane i ponownie przesyłane potokowo, xargsco ponownie tworzy pojedynczą linię rozmiarów oddzielonych spacjami. Teraz wykonaj magię sed, która zastępuje każdą spację znakiem plus ( +), a na końcu bc(podstawowy kalkulator) wykonuje obliczenia.
Może wymagać dodatkowego dostrojenia, a lspolecenie może narzekać na zbyt długą listę argumentów.