Я использую find для печати строки для каждого файла и каталога:
find ${rootdirectory} -printf '%p,%T@\n' >> ${outputfile}
Однако мне нравится конвертировать %T@
из unixepoch в Windows FILETIME:
filetime=$(( (%T@ + 11644473600) * 10000000 ))
find ${rootdirectory} -printf '%p,${filetime}\n' >> ${outputfile}
Это, конечно, не работает, потому что %T@
не установлен до find -printf
.
Каков самый быстрый способ найти миллионы файлов при изменении найденного целого числа? У меня уже есть решение с stat
, но оно очень медленное:
find ${rootdirectory} -exec 1>${outputfile} sh -c 'for file in "${1}"/* ;
do
unixtime=$(stat -c%Y ${file})
filetime=$(( (${unixtime} + 11644473600) * 10000000 ))
stat -c%n,${filetime} ${file}
done' none {} \;
Я изменил это на вариант с -printf
, но T
не распознается:
find ${rootdirectory} -exec 1>${outputfile} sh -c 'for file in "${1}"/* ;
do
unixtime=$(printf %T@)
filetime=$(( (${unixtime} + 11644473600) * 10000000 ))
-printf %p,${filetime}
done' none {} \;
Моя последняя надежда заключалась в следующем:
print_format="%p,$(( %T@ + 11644473600 ))\n"
find ${rootdirectory} -printf "$print_format"
Ради полноты, это не работает:
find ${rootdirectory} -printf '%p,$(( (%T@ + 11644473600) * 10000000 ))\n'
У кого-нибудь есть идеи? И будет ли xargs
быстрее exec
?