我曾经有过一些任务,需要对来自不同服务器的目录上的文件更改进行报告,并设法使用简单的 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