Mam katalog z dużą ilością zdjęć. Konkretnie du -sh --apparent-size /path/to/myfolder
daje mi 331G. Który jest świetny. Ale teraz chcę uzyskać listę pogrupowaną według miesięcy, np. Coś takiego:
2016-01 20MB
2016-02 520MB
2016-03 312MB
...
Czy istnieje (rozsądny) sposób, aby to zrobić za pomocą wbudowanych linuksów, czy powinienem po prostu napisać własne narzędzie Python, aby to zrobić?
shell
files
disk-usage
Wayne Werner
źródło
źródło
Odpowiedzi:
W systemie Linux spróbuj:
Jak to działa
find /my/path
Wyszukuje pliki w / my / path.
-maxdepth 1
Mówi
find
to, aby nie zaglądać do podkatalogów. (Jeśli chcesz wyszukać rekurencyjnie, pomiń tę opcję).-type f
Oznacza
find
to ograniczenie wyszukiwania do zwykłych plików.-printf '%TY-%Tm %s\n'
Mówi o tym,
find
aby wydrukować rok-miesiąc, a następnie rozmiar w bajtach dla każdego pliku.Ponieważ nie używamy ich, nazwy znalezionych plików nie są drukowane.
b[$1]+=$2
Dla każdego znalezionego pliku dodajemy jego liczbę bajtów, znalezioną w kolumnie 2, do liczby, którą ta kombinacja rok-miesiąc w tablicy asocjacyjnej
b
.END{for (date in b) print date, b[date]}
Po przetworzeniu wszystkich danych wyjściowych
find
drukujemy wyniki.sort
To sortuje wyniki według daty.
Wersja wieloliniowa
Dla tych, którzy wolą kod rozłożony na wiele wierszy:
Przykład
Rozważmy katalog z tymi plikami:
Dane wyjściowe z naszego polecenia to:
Udoskonalenia
Jeśli chcemy, aby dane wyjściowe były w bajtach (MiB) zamiast w bajtach, możemy przekonwertować jednostki w następujący sposób:
Za pomocą możemy uzyskać jeszcze większą kontrolę nad formatem wyjściowym
printf
. Tutaj, aby zachować tylko jedną cyfrę po przecinku, formatujemy rozmiar za pomocą%5.1f
:źródło
printf "%s %9d\n", date, b[date]
zamiastprint date, b[date]
dodawania spacji do drugiej kolumnyprintf
.find
wsparcie-maxdepth
, prawdopodobnie masz[g]awk
wsparciePROC_INFO["sorted_in"]="@ind_str_asc"