我正在使用一个名为 ExifTool 的出色程序来递归地重命名大量文件。
这是示例用法:
$ exiftool -r -ext JPG '-FileName<CreateDate' -d %Y%m%d_%H%M%S.jpg .
Error: './folder1/110310_135433.jpg' already exists - ./folder1/source.jpg
Warning: No writable tags found - ./folder2/110404_095111.jpg
68 directories scanned
1650 image files updated
5 image files unchanged
2 files weren't updated due to errors
当处理非常大批量的图像时,由于错误而未更新的文件数量通常有数百个,因此单独移动每个文件是mv
不可能的。
我想同时将带有错误/警告的文件移动到单独的目录以进行进一步处理。
我需要从终端输出中提取问题文件的路径并将它们移动到一起,但我不确定如何实现这一点。
我该怎么办呢?
无论如何,我使用的是 Ubuntu 11.10。
答案1
这将从错误/警告中提取文件名exiftool
,并在“未处理”文件夹下创建仅包含这些文件的副本目录树。没有尝试将它们移动到单个目录中以避免覆盖具有相同名称但不同源目录的文件的风险。
exiftool ... 2>&1 | tee exiftool.log | egrep '^(Error|Warning)' | \
sed 's/^Error: .* already exists - //;s/^Warning: .* - //' | \
while IFS= read -r img; do
rsync -vR -- "$img" unprocessed/
#rm -v -- "$img"
done
该sed
部分仅考虑所提供示例的输出,我不熟悉该工具及其可能的输出消息。
编辑:该rm
部分已被注释掉,因为您最好先尝试一下。
答案2
ExifTool 的解决方案是在文件名中添加 %c(或 -d 参数中的 %%c)。这将导致将副本号添加到具有重复名称的文件中。