[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 %s
komenda w pliku powróci jego rozmiar w bajtach. tr
Komenda tutaj służy do przezwyciężenia xargs
ograniczeń Command (widocznie rurociągów na xargs
to wyniki przecinania na więcej wierszy, łamiąc logiki mojego polecenia). Dlatego tr
zadbano o zastąpienie wysuwu linii +
znakiem (plus). sed
ma 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 ( -b
opcja)
# du -sb /
12684646920 /
Tak jak się spodziewałem, jest on nieco większy niż moje obliczenia polecenia, ponieważ du
narzędzie zwraca przydzielone miejsce dla każdego pliku, a nie rzeczywiste zajęte miejsce.
[wersja początkowa]
Nie możesz użyć du
polecenia, jeśli chcesz znać dokładny sumaryczny rozmiar folderu, ponieważ (zgodnie z cytatem ze strony podręcznika) du
szacuje 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, xargs
co 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 ls
polecenie może narzekać na zbyt długą listę argumentów.