Mały wpis ku pamięci: jak policzyć, ile miejsca zajmują w danym drzewie katalogów pliki z wybranymi rozszerzeniami.

W moim przypadku chciałem się dowiedzieć, ile miejsca zajmują filmy rodzinne. Pierwszym krokiem będzie odszukanie wszystkich filmów:

find ~/ZDJECIA -iregex ".*\.\(mp4\|mpeg\|avi\|3gp\|mov\)"

Zamiast używać standardowej konstrukcji -name użyłem wyrażenia regularnego. Pozwoliło ona na dużo bardziej zwarte umieszczenie wszystkich rozszerzeń, które mnie interesują.

Teraz wypada wyświetlić informację, ile miejsca zajmuje każdy z plików. Można to tego użyć opcji -exec w połączeniu z wywołaniem polecenia ls, ale dużo lepszy efekt da użycie przełącznika -ls. Efekt będzie podobny, a całość będzie funkcjonować dużo szybciej.

find ~/ZDJECIA -iregex ".*\.\(mp4\|mpeg\|avi\|3gp\|mov\)" -ls

Ostatnim elementem będzie wyciągnięcie kolumny z wielkością pliku i jej zsumowanie, można to zrobić przy użyciu polecenia awk:

find -iregex ".*\.\(mp4\|mpeg\|avi\|3gp\|mov\)" -ls | awk '{suma += $7} END {print suma}'

I to w sumie rozwiązuje problem.

Ja jeszcze tylko chciałem mieć wielkość plików wyświetlaną w megabajtach. Można sobie do przeliczyć używając nawet zwykłego polecenia echo, chociaż spada drastycznie czytelność kodu i tworzy się taki potworek:

echo $(($(find -iregex ".*\.\(mp4\|mpeg\|avi\|3gp\|mov\)" -ls | awk '{suma += $7} END {print suma}')/1024/1024)) MB

Tags: , ,