使用 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
的备份文件。
您的第一个命令的错误是您要分配的值中有空格,需要用引号引起来。
我有大约 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
的备份文件。
您的第一个命令的错误是您要分配的值中有空格,需要用引号引起来。