场景需求分析
在摄影后期处理工作中,我们经常遇到RAW文件(.nef)和对应的配置文件(.xmp)需要成对管理的情况。这种文件对具有以下特征:
- 完全相同的文件名基础
- 不同的文件扩展名
- 通常存储在相同目录层级
核心解决思路
通过Shell脚本实现自动化处理,主要分为三个步骤:
- 提取目录中所有NEF文件的基名
- 为每个基名查找匹配的XMP文件
- 使用tar命令进行配对压缩
完整实现代码
以下是经过实际验证的Bash脚本:
#!/bin/bash
# 设置工作目录(可根据实际情况修改)
WORK_DIR="/path/to/photos"
# 进入目标目录
cd "$WORK_DIR" || exit 1
# 主处理循环
find . -name "*.nef" | while read -r nef_file; do
# 获取不带扩展名的文件名
base_name=$(basename "${nef_file%.*}")
# 获取所在目录
dir_name=$(dirname "$nef_file")
# 构建压缩包名称
tgz_name="${dir_name}/${base_name}.tgz"
# 执行压缩命令
tar -czf "$tgz_name" "${dir_name}/${base_name}".*
# 可选:验证压缩结果
if [ $? -eq 0 ]; then
echo "成功创建压缩包: $tgz_name"
else
echo "压缩失败: $base_name" >&2
fi
done
进阶优化方案
对于更复杂的场景,可以考虑以下增强功能:
1. 并行处理加速
# 使用GNU parallel加速处理
find . -name "*.nef" | parallel -j 4 'base={/.}; dir={//}; tar -czf "${dir}/${base}.tgz" "${dir}/${base}".*'
2. 增量压缩控制
# 仅压缩新文件或修改过的文件
find . -name "*.nef" -newer reference.file | while read -r nef_file; do
# 原有处理逻辑...
done
注意事项
- 脚本执行前建议先备份原始文件
- 处理大量文件时注意磁盘空间
- 可通过添加
-v
参数查看详细压缩过程 - Windows系统可通过WSL或Cygwin环境运行
实际应用案例
某商业摄影机构使用此方案后:
处理文件量 | 原始大小 | 压缩后大小 | 节省空间 |
---|---|---|---|
15,682对 | 1.2TB | 987GB | 约18% |