列出缺少元数据的 PDF 文件

列出缺少元数据的 PDF 文件

我曾经有过一些任务,需要对来自不同服务器的目录上的文件更改进行报告,并设法使用简单的 Unix 命令来制作报告。我用了:

ls -R -lT /Volumes/www/subdir/ | awk '{if ($7=="" ) print $0; else print $11";"$7"/"$8"/"$10;}' > /Users/[username]/Desktop/output.txt 

现在我需要制作所有缺少元数据的 PDF 文件的报告。我想知道是否有一种方法(很像我当前的方法)来检查文件的元数据并仅输出缺少元数据的文件。我想将 ls 结果通过管道传输到文件,以便可以将数据导入 Excel。在我的其他报告中,我使用 awk 来格式化 ls 输出,以便将其导入 Excel 中。

此操作将在 Mac 上完成,并且更喜欢使用内置命令而不是安装,因为我没有在办公硬件上安装软件的管理员权限。

更新: 该报告将被修改为不仅报告 PDF,而且我预计将来还必须报告其他文件类型。因此,报告可能会搜索一种或多种文件类型。

我现在需要检查的元数据是:

  • 标题
  • 作者
  • 主题
  • 关键词

我已经成功地使用以下方法列出了文件元数据:

mdls [path to file]

这会产生所有元数据的列表。我用一份填写了元的pdf和一份没有填写元的pdf对其进行了测试。我注意到缺少元数据,它不会返回 null,而是根本不列出元键。

我目前正在尝试的事情是:

mdfind -onlyin /Volumes/web/ "kMDItemAuthors == ''"

我如何使用这些数据来过滤输出ls

更新: 我设法通过使用以下内容获得列出所有 pdf 的报告:

ls -R -lT [server directory path] | grep ".[file extension]" | awk '{print $11";"$7"/"$8"/"$10;}' > [output file path] 

这样做的副作用之一是我失去了 ls 的递归属性。仍在致力于此。

我还需要找到一种方法来仅过滤那些缺少所需元数据的内容。我还被告知我还​​需要制作一份包含所有元数据的 PDF 报告。我尝试过使用当前命令并将输出先通过管道传输到 mdfind,然后再传输到 awk,但我一定错过了一些东西。

答案1

使用出口工具

-T -FilePath要递归打印所有具有扩展名pdf( -r) 且/search/path指定元数据为空的文件的完整路径 ( ),请使用:

exiftool -T -FilePath \
         -if '$FileTypeExtension eq "pdf"' \
         -if '(not $Title) or (not $Author) or (not $Subject) or (not $Keywords)' \
         -r /search/path

自定义命令以满足您未来的需求。

答案2

如果您想要更通用的东西,您必须创建一些程序/脚本来检查一个文件,然后find(1)依次在每个目标上运行它,例如:

find . -name "*.pdf" -exec check \;

确保check file始终返回成功 (0),并根据需要打印有问题的文件的名称。或者调整上面的内容,以便在文件损坏时返回成功,然后执行:

find . -name "*.pdf" -exec check \; -print

相关内容