Nikon RAW 文件转换Jpg第三版
上一篇 使用 Syncthing API 监听 NFS 目录同步并自动转换 Nikon RAW 文件 中的处理过程还是有些问题,于是不再追求试试转换,改为每天转换一次,缺点是当天就要把文件同步到对应日期的目录
#!/bin/bash
# 自动获取昨天日期
if date -d "yesterday" +%Y-%m-%d >/dev/null 2>&1; then
# Linux
YESTERDAY_FOLDER=$(date -d "yesterday" +%Y/%Y-%m-%d)
else
# macOS
YESTERDAY_FOLDER=$(date -v -1d "+%Y/%Y-%m-%d")
fi
# 如果传入参数就用传入的,否则使用昨天日期
DATE_FOLDER="${1:-$YESTERDAY_FOLDER}"
# 源目录和目标目录
SOURCE_DIR="/mnt/nfs_share/NikonRaw"
TARGET_BASE_DIR="/mnt/nfs_share/NikonJpg"
SOURCE_PATH="${SOURCE_DIR}/${DATE_FOLDER}"
TARGET_PATH="${TARGET_BASE_DIR}/${DATE_FOLDER}"
# 检查源目录是否存在
if [ ! -d "$SOURCE_PATH" ]; then
echo "源目录不存在:$SOURCE_PATH"
exit 1
fi
# 确保目标目录存在
mkdir -p "$TARGET_PATH"
# 转换函数
convert_to_jpg() {
local input_file=$1
# 获取相对路径 (去掉 SOURCE_DIR 的前缀)
local relative_path="${input_file#$SOURCE_DIR/}"
# 生成目标目录(保持和 SOURCE_DIR 一致的结构)
local target_dir="${TARGET_BASE_DIR}/$(dirname "$relative_path")"
mkdir -p "$target_dir"
# 目标 JPG 文件路径
local output_file="${target_dir}/$(basename "${input_file%.NEF}.jpg")"
# 避免重复转换
if [ -f "$output_file" ]; then
echo "文件已转换,跳过:$output_file"
return
fi
# 使用 dcraw 提取 JPEG 预览图
if dcraw -e -c "$input_file" > "$output_file"; then
echo "转换成功:$input_file -> $output_file"
# 拷贝 EXIF 信息
exiftool -tagsFromFile "$input_file" -DateTimeOriginal -CreateDate -TimeZone -overwrite_original "$output_file"
if [ $? -eq 0 ]; then
echo "EXIF 数据更新成功:$output_file"
else
echo "EXIF 数据更新失败:$output_file"
fi
else
echo "转换失败:$input_file"
fi
}
# 处理 NEF 文件,排除 sync-conflict
echo "处理目录:$SOURCE_PATH..."
find "$SOURCE_PATH" -type f -name "*.NEF" ! -name "*sync-conflict*" | while read -r file; do
convert_to_jpg "$file"
done
echo "所有文件处理完成。"
然后添加每天凌晨的执行任务
0 0 * * * /bin/bash /home/test/process_new_folder.sh >> /var/log/process_new_folder.log 2>&1
评论
发表评论