Mam system plików, który ma kilka milionów plików i chciałbym zobaczyć rozkład rozmiarów plików rekurencyjnie w określonym katalogu. Wydaje mi się, że jest to całkowicie wykonalne w przypadku niektórych bash / awk fu, ale przydałaby mi się ręka. Zasadniczo chciałbym coś takiego:
1KB: 4123
2KB: 1920
4KB: 112
...
4MB: 238
8MB: 328
16MB: 29138
Count: 320403345
Wydaje mi się, że nie powinno być tak źle biorąc pod uwagę pętlę i foo warunkowego rozmiaru pliku log2, ale wydaje mi się, że nie mogę się tam dostać.
Powiązane pytanie: Jak znaleźć pliki większe / mniejsze niż x bajtów? .
linux
command-line
bash
unix
notpeter
źródło
źródło
ls
pliku nafind
. Przywracam to do poprzedniego stanu.xargs
jest znacznie szybsze niż-exec
, więc zastosowałem tę metodę.Oparty na odpowiedzi garyjohna, tutaj jest linijka, która również formatuje dane wyjściowe do postaci czytelnej dla człowieka:
Oto jego rozszerzona wersja:
W pierwszym
awk
zdefiniowałem minimalny rozmiar pliku, aby zebrać wszystkie pliki mniejsze niż 1kb w jednym miejscu. W drugim zdefiniowanoawk
funkcję,human(x)
aby utworzyć czytelny dla człowieka rozmiar. Ta część oparta jest na jednej z odpowiedzi tutaj: /unix/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc -like-du-ls1Przykładowy wynik wygląda następująco:
źródło
Spróbuj tego:
WYNIK :
OBJAŚNIENIE:
find . -type f -exec ls -lh {} \;
: dość proste, znajdź pliki w bieżącym katalogu i uruchomls -lh
je na nichmatch($5,/([0-9.]+)([A-Z]+)/,k);
: spowoduje to wyodrębnienie rozmiaru pliku i zapisanie każdego dopasowania w tablicyk
.if(!k[2]){print "1K"}
: jeśli niek[2]
jest zdefiniowany, rozmiar pliku wynosi <1 KB. Ponieważ wyobrażam sobie, że nie przejmujesz się tak małymi rozmiarami, skrypt zostanie wydrukowany1K
dla wszystkich plików o rozmiarze <= 1 KB.else{printf "%.0f%s\n",k[1],k[2]}
: jeśli plik jest większy niż 1 KB, zaokrąglij rozmiar pliku do najbliższej liczby całkowitej i wydrukuj wraz z jego modyfikatorem (K, M lub G).sort | uniq -c
: policz wystąpienia każdej drukowanej linii (rozmiaru pliku).sort -hk 2
: sortuj według drugiego pola w formacie czytelnym dla człowieka. W ten sposób7G
posortowano według8M
.źródło