Я думаю, все будет примерно так.rrdtool create minecraft.rrd --step=86400 DS:blocks:COUNTER:172800:U:U RRA:AVERAGE:0.5:1:730
По сути, это приведет к настройке одного источника данных с именем «блоки», который ожидает значение каждые 86 400 секунд и оставляет пробел, если результат не предоставляется в течение 172 800 секунд. Он будет хранить все точки данных в течение двух лет. Вы можете добавить еще один RRA, если хотите дольше хранить больше данных.
MacOS отслеживает время создания файла, но не многие инструменты могут с ним работать, да и в любом случае это часто не имеет смысла. Для большинства целей время модификации работает нормально, и оно поддерживается гораздо большим количеством инструментов.
Обратите внимание, что все мои решения предполагают, что ни одно имя файла не содержит символов ,
, "
или новой строки. В противном случае вывод будет неоднозначным; для представления этих символов в CSV-файле требуется особая осторожность. Если ваши имена файлов могут содержать запятые, вы можете заключить имена файлов в двойные кавычки или использовать другой символ, например ;
, в качестве разделителя столбцов.
Чтобы перечислить нужные файлы, используйте оператор glob**
для обхода подкаталогов и (…|…)
для сопоставления нескольких расширений. Используйте квалификатор glob .
, чтобы ограничить совпадения с обычными файлами, N
, чтобы не выдавать ошибку, если совпадений нет, и, необязательно, D
, чтобы включить точечные файлы. При необходимости используйте флаг подстановки i
для нечувствительного соответствия регистру расширений -.
Чтобы получить нужные данные, используйте встроенную функциюzstat
из модуля zsh/stat
. Чтобы напечатать имя файла без части каталога, используйте модификатор истории t
, прикрепленный к расширению параметра .
zmodload -F zsh/stat b:zstat
for x in **/*.(#i)(mov|mkv|flv)(.N); do
TZ=UTC zstat -A a -F '%Y-%m-%d %H:%M:%S' +mtime -- $x;
print -lr -- "$x:t,$a[1]";
done
/usr/bin/stat
, время создания С помощью системной утилиты stat
вместо zstat
можно указать время создания файла. Поскольку stat
не имеет возможности удалить часть имени файла, относящуюся к каталогу, я сначала переключаюсь на каталог, содержащий файл.
for x in **/*.(#i)(mov|mkv|flv)(.N); do
(cd $x:h && TZ=UTC stat -t '%Y-%m-%d %H:%M:%S' -f %N,%SB -- $x:t)
done
В GNU find
вы можете использовать первичный-printf
для представления вывода в желаемом формате. Используйте%f
для имени файла без части каталога и%T
с последующим форматом времени для времени модификации. Для сопоставления нескольких расширений удобно использовать-regex
с -regextype posix-extended
.
TZ=UTC gfind -type f -regextype posix-extended -regex '.*\.(mov|mkv|flv)' \
-printf '%f,%TY-%Tm-%Td %TH:%TM:%TS\n'
/usr/bin/find
+ /usr/bin/stat
,время создания В системе find
часть поиска аналогична поиску GNU, за исключением использования опции -E
вместо основной -regextype posix-extended
, но вам нужно проработать листинг с помощью шелл-кода. Действие -execdir
удобно позволяет вам получить базовое имя файла.
TZ=UTC find -E. -regex '.*\.(mov|mkv|flv)' -type f \
-execdir sh -c 'for x do stat -t "%Y-%m-%d %H:%M:%S" -f %N,%SB -- "$x"; done' sh {} \;