У меня есть каталог с большим количеством фотографий. Конкретно, du -sh --apparent-size /path/to/myfolder
дает мне 331G. Что здорово. Но теперь я хочу получить список сгруппированных по месяцам, например, примерно так:
2016-01 20MB
2016-02 520MB
2016-03 312MB
...
Есть (разумный) способ сделать это с помощью встроенных в Linux, или мне просто написать свою собственную утилиту Python, чтобы сделать это?
shell
files
disk-usage
Уэйн Вернер
источник
источник
Ответы:
В Linux попробуйте:
Как это устроено
find /my/path
Это ищет файлы в / my / path.
-maxdepth 1
Это говорит
find
не смотреть в подкаталоги. (Если вы хотите рекурсивный поиск, пропустите эту опцию.)-type f
Это говорит
find
об ограничении поиска обычными файлами.-printf '%TY-%Tm %s\n'
Это говорит
find
о том, что нужно распечатать год-месяц с указанием размера в байтах для каждого файла.Поскольку мы их не используем, имена найденных файлов не печатаются.
b[$1]+=$2
Для каждого найденного файла мы добавляем его количество байтов, найденное в столбце 2, к количеству этой комбинации год-месяц в ассоциативном массиве
b
.END{for (date in b) print date, b[date]}
После того, как мы обработали все выходные данные
find
, мы распечатываем результаты.sort
Это сортирует результаты по дате.
Многострочная версия
Для тех, кто предпочитает их код в несколько строк:
пример
Давайте рассмотрим каталог с этими файлами:
Вывод нашей команды:
Уточнения
Если мы хотим получить выходные данные в мегабайтах (MiB) вместо байтов, мы можем преобразовать единицы следующим образом:
Мы можем получить еще больший контроль над форматом вывода с помощью
printf
. Здесь, чтобы сохранить только одну цифру после десятичной точки, мы форматируем размер с помощью%5.1f
:источник
printf "%s %9d\n", date, b[date]
вместо того,print date, b[date]
чтобы добавить пробел во второй столбецprintf
.find
эта поддержка, у-maxdepth
вас, вероятно, есть[g]awk
поддержкаPROC_INFO["sorted_in"]="@ind_str_asc"