Поскольку с этим проще иметь дело (imho), я написал сам сценарий Ruby:
require 'fileutils'
ARGV.each { |file|
if File.exist?(file) && !File.directory?(file)
exif = `exiftool "#{file}" | grep -E "(Error|Create Date)"`
if exif.strip.size > 0
exif = exif.split("\n")[0].split(/\s+/)
if exif[0] != "Error"
# Change the target format here
filename = exif[3].gsub(":", "-") + " " +
exif[4].gsub(":", ".") +
File.extname(file)
if filename != file && !File.exist?(filename)
FileUtils::mv(file, File.dirname(file) + "/" + filename)
end
end
end
end
}
Что он делает?
Итерирует по всем файлам передается как параметры (например, *. JPG
).
Я проверил, правильно ли он обрабатывает файлы и видео в формате RAW. Он должен работать со всем, с чем может иметь дело exiftool
.
Ничего не делает, если файл
exiftool
сообщает об ошибке, или Это делает его довольно надежным. В частности, никакие файлы не могут исчезнуть (молча), как в случае с некоторыми другими ответами.