使用 bash 脚本和 exiftool 添加部分文件名作为 PDF 元数据

Add part of filename as PDF metadata using bash script and exiftool

我有大约 600 本 PDF 格式的书,文件名的格式为:

AuthorForename AuthorSurname - 标题(日期).pdf

例如:

Foo Z. Bar - 为白痴编写脚本 (2017)

Bar Foo - 有趣的 PDF (2016)

不幸的是,几乎所有的元数据都丢失了,所以当我将它们导入 Calibre 时,Author 字段是空白的。

我正在尝试编写一个脚本,它将获取出现在“-”之前的所有内容,删除尾随 space,然后使用 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= 短语是怎么回事?请有人能赐教吗?

您不需要为此编写脚本。事实上,这样做比让 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 的备份文件。

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