Создать CSV из информации о каталоге выбранных файлов

Я думаю, все будет примерно так.rrdtool create minecraft.rrd --step=86400 DS:blocks:COUNTER:172800:U:U RRA:AVERAGE:0.5:1:730

По сути, это приведет к настройке одного источника данных с именем «блоки», который ожидает значение каждые 86 400 секунд и оставляет пробел, если результат не предоставляется в течение 172 800 секунд. Он будет хранить все точки данных в течение двух лет. Вы можете добавить еще один RRA, если хотите дольше хранить больше данных.

0
25.04.2021, 23:22
1 ответ

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, время модификации

В 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 {} \;
2
28.04.2021, 22:51

Теги

Похожие вопросы