使用bash脚本和exiftool

时间:2017-06-10 22:46:10

标签: bash pdf exiftool

我有大约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 =短语在这里打破了什么?请有人开导我吗?

1 个答案:

答案 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添加到文件名中的备份文件。

第一个命令的错误是你想要分配的值中有空格,需要用引号括起来。