Kiedy używam ls
lub du
, uzyskuję ilość miejsca na dysku zajmowaną przez każdy plik.
Potrzebuję sumy wszystkich danych w plikach i podkatalogach, które otrzymam, gdybym otworzył każdy plik i policzył bajty. Dodatkowe punkty, jeśli mogę to uzyskać bez otwierania każdego pliku i liczenia.
ls
w rzeczywistości pokazuje liczbę bajtów w każdym pliku, a nie ilość miejsca na dysku. Czy to wystarcza dla Twoich potrzeb?du
nie można go użyć, aby odpowiedzieć na to pytanie. Pokazuje ilość miejsca na dysku zajmowaną przez katalog na dysku (dane plików plus rozmiar pomocniczych metainformacji systemu plików). Wynikdu
może być nawet mniejszy niż całkowity rozmiar wszystkich plików. Może się tak zdarzyć, jeśli system plików może przechowywać dane skompresowane na dysku lub jeśli używane są twarde łącza. Prawidłowe odpowiedzi są oparte nals
ifind
. Zobacz odpowiedzi Nelsona i bytepana tutaj lub tę odpowiedź: unix.stackexchange.com/a/471061/152606Odpowiedzi:
Jeśli chcesz mieć `` pozorny rozmiar '' (czyli liczbę bajtów w każdym pliku), a nie rozmiar zajmowany przez pliki na dysku, użyj opcji
-b
lub--bytes
(jeśli masz system Linux z jądrem GNU ):źródło
du -shb
(jak sugeruje ta odpowiedź),-b
ustawienie wydaje się zastępować-h
ustawienie.du -sh --apparent-size /dir/
Zastosowanie
du -sb
:Opcjonalnie dodaj
h
opcję bardziej przyjaznych dla użytkownika wyników:źródło
brew install coreutils
. Będzie dostępny jako poleceniegdu
.ls
->file.gz hardlink-to-file.gz
.stat -c %s file.gz
->9657212
.stat -c %s hardlink-to-file.gz
->9657212
.du -sb
->9661308
. Na pewno nie jest to całkowity rozmiar zawartości, ale rozmiar katalogu, który zajmuje na dysku.cd do katalogu, a następnie:
ftw!
Pierwotnie pisałem o tym tutaj: https://ao.gl/get-the-total-size-of-all-the-files-in-a-directory/
źródło
-L
opcję, więcdu
podążam za linkami symbolicznymi.Tylko alternatywa:
grep -v '^d'
wykluczy katalogi.źródło
ls -lR | grep '.png$' | awk '{total += $5} END {print "Total:", total/1024/1024, "MB"}'
du
tego rozwiązania tak naprawdę liczy całkowity rozmiar wszystkich danych w plikach tak, jakby były otwierane jeden po drugim, a ich bajty były liczone. Ale tak, dodanie-A
parametru jest wymagane, aby policzyć również pliki ukryte.Format „% s” programu stat podaje rzeczywistą liczbę bajtów w pliku.
Możesz zastąpić swoją ulubioną metodę sumowania liczb .
źródło
find -print0
ixargs -0
są potrzebne w przypadku nazw plików ze spacjami. OS X chcestat -f %z
.du
raporty.)du
narzędzie, ta odpowiedź jest poprawna. Odpowiedź jest bardzo podobna do odpowiedzi tutaj: unix.stackexchange.com/a/471061/152606 . Ale! -type d
zamiast tego-type f
użyłbym również do liczenia dowiązań symbolicznych (rozmiar samego dowiązania symbolicznego (zwykle kilka bajtów), a nie rozmiar pliku, na który wskazuje).Jeśli używasz "du" busyboxa w systemie emebedded, nie możesz uzyskać dokładnych bajtów z du, tylko KB, które możesz uzyskać.
źródło
Podczas tworzenia folderu wiele systemów plików Linuksa przydziela 4096 bajtów na przechowywanie niektórych metadanych dotyczących samego katalogu. Ta przestrzeń jest zwiększana o wielokrotność 4096 bajtów w miarę rozrastania się katalogu.
Komenda du (z opcją -b lub bez niej) liczy to miejsce , jak widać wpisując:
otrzymasz wynik 4096 bajtów dla pustego katalogu. Tak więc, jeśli umieścisz 2 pliki po 10000 bajtów w katalogu, całkowita ilość podana przez du -sb wyniesie 24096 bajtów.
Jeśli uważnie przeczytasz pytanie, nie o to chodzi. Pytający zapytał:
w powyższym przykładzie powinno to być 20000 bajtów, a nie 24096.
Tak więc poprawna odpowiedź IMHO może być połączeniem odpowiedzi Nelsona i sugestii hlovdal, aby obsłużyć nazwy plików zawierające spacje:
źródło
Istnieją co najmniej trzy sposoby uzyskania „sumy wszystkich danych w plikach i podkatalogach” w bajtach, które działają zarówno w systemie Linux / Unix, jak i Git Bash dla Windows, wymienione poniżej w kolejności od najszybszego do średnio najwolniejszego. Dla Twojej informacji zostały wykonane w katalogu głównym dość głębokiego systemu plików (
docroot
w instalacji Magento 2 Enterprise zawierającej 71 158 plików w 30 027 katalogach).1.
2.
3.
Te dwa również działają, ale opierają się na poleceniach, które nie istnieją w Git Bash dla Windows:
1.
2.
Jeśli chcesz tylko sumę dla bieżącego katalogu, dodaj
-maxdepth 1
dofind
.Zwróć uwagę, że niektóre z sugerowanych rozwiązań nie zwracają dokładnych wyników, więc zamiast tego trzymałbym się powyższych rozwiązań.
źródło
dc
jest częściąbc
pakietu, więc abydc
go uzyskać , należy go zainstalowaćbc
.W przypadku Win32 DOS możesz:
c:> dir / sc: \ katalog \ chcesz \
a przedostatnia linia powie, ile bajtów zajmują pliki.
Wiem, że to czyta wszystkie pliki i katalogi, ale w niektórych sytuacjach działa szybciej.
źródło
du
jest przydatne, alefind
jest przydatne w przypadku, gdy chcesz obliczyć rozmiar tylko niektórych plików (na przykład używając filtru według rozszerzenia). Zauważ również, żefind
sami mogą wydrukować rozmiar każdego pliku w bajtach. Aby obliczyć całkowity rozmiar, możemy połączyćdc
polecenie w następujący sposób:Tutaj
find
generuje sekwencję poleceń dladc
polubienia123 + 456 + 11 +
. Chociaż ukończony program powinien wyglądać jak0 123 + 456 + 11 + p
(pamiętaj o notacji postfiksowej).Tak więc, aby otrzymać ukończony program, musimy umieścić go
0
na stosie przed wykonaniem sekwencji ze standardowego wejścia, a po wykonaniu wypisać najwyższy numer (p
polecenie na końcu). Osiągamy to poprzezdc
opcje:-e0
to tylko skrót do-e '0'
tego, co stawia0
na stosie,-f-
służy do odczytu i wykonywania poleceń ze stdin (wygenerowanegofind
tutaj),-ep
służy do wypisania wyniku (-e 'p'
).Aby wydrukować rozmiar w MiB, tak jak
284.06 MiB
możemy-e '2 k 1024 / 1024 / n [ MiB] p'
zamiast tego użyć w punkcie 3 (większość spacji jest opcjonalna).źródło
To może pomóc:
Powyższe polecenie zsumuje wszystkie pliki opuszczające rozmiar katalogów.
źródło
-A
opcję należy dodać dols
.Posługiwać się:
Gdzie <DIR> to katalog, który chcesz sprawdzić.
Opcja „-c” daje sumaryczne dane, które są wyodrębniane przy użyciu części polecenia „grep total”, a liczba w kilobajtach jest wyodrębniana za pomocą polecenia awk.
Jedynym zastrzeżeniem jest to, że jeśli masz podkatalog zawierający tekst „total”, zostanie on również wypluty.
źródło