我有大约600本PDF格式的书籍,其中的文件名格式为:
AuthorForename AuthorSurname - Title(Date).pdf
例如:
Foo Z. Bar - 为白痴撰写脚本(2017)
Bar Foo - PDF的乐趣(2016)
遗憾的是,几乎所有元数据都缺少元数据,所以当我将它们导入Calibre时, Author 字段为空。
我正在尝试编写一个脚本,该脚本会删除在' - '之前显示的所有内容,删除尾随空格,然后使用exiftool将其添加为PDF元数据中的作者。
到目前为止,我有以下内容:
for i in "*.pdf";
do exiftool -author=$(echo $i | sed 's/-.*//' | sed 's/[ \t]*$//') "$i";
done
但是,尝试运行它时,会返回以下内容:
Error: File not found - Z.
Error: File not found - Bar
Error: File not found - *.pdf
0 image files updated
3 files weren't updated due to errors
-author =短语在这里打破了什么?请有人开导我吗?
答案 0 :(得分:2)
您不需要编写此脚本。事实上,这样做会比让exiftool自己做得慢得多,因为你需要exiftool为每个文件启动一次。
试试这个
exiftool -ext pdf '-author<${filename;s/\s+-.*//}' /path/to/target/directory
击穿:
-ext pdf
仅处理PDF文件
-author
要复制到的标签
<
来自其他标记选项的副本。在这种情况下,文件名将被视为伪标签
${filename;s/\s+-.*//}
从文件名复制,但首先对其执行正则表达式。在这种情况下,查找1个或多个空格,短划线以及名称的其余部分并将其删除。
如果要递归到子目录,请添加-r
。添加-overwrite_original
以避免将_original
添加到文件名中的备份文件。
第一个命令的错误是你想要分配的值中有空格,需要用引号括起来。