将标签添加到文件 (PDF) 并从命令行或脚本进行处理

将标签添加到文件 (PDF) 并从命令行或脚本进行处理

我想向我的文件(在本例中为 PDF 文件)添加标签,以便我可以在文件系统中搜索它们,然后从命令行或脚本中处理结果。

有没有一个 Linux 工具可以对一般文件执行此操作?

一种简单的方法是修改文件名,然后使用 find -exec 或 in pipeline 访问文件名虽然我想用多个标签标记文件,并且文件名会很长,但我想以这种方式处理它们

举个例子,假设我有大量 PDF 文件。所以我想将其中一些标记为账单,其中一些作为草稿

这样以后我就可以让应用程序浏览我的文件系统并处理所有匹配项。可以说创建符号链接将所有这些都放在适当的文件夹中,或者合并将它们合并为一个 PDF 等...

我的问题不是关于那些在管道中排在第二位的程序,例如: lngspdfjoin,但是关于那些直接使用标签的内容,例如:应用标签并搜索包含这些标签的文件。

答案1

这与您的想法不太相符,但如果您对使用支持元数据的文件感兴趣,exiftool则可以查看和更改大量文件类型(包括 PDF 文件)的元数据。有关完整列表,请参阅man exiftool

我曾多次使用它来创建和更改 PDF 上的元数据。例如:

  exiftool -Title="My PDF" \
           -Subject="stuff" \
           -Description="my pdf about various things" \
           -Keywords="miscellanea, nonsense" \
           -Author="me" \
           -Creator="also me" \
           "mypdf.pdf"

现在它与你的想法变得更加紧密相关。元数据字段Keywords(或支持创建任意字段的文件格式的任何其他字段 - 很多都这样做)可用于将标签存储在文件本身中,从而允许脚本自动维护标签符号链接场。

或者,脚本可以维护一个数据库(像 CSV 或类似的纯文本,或者像 SQL 数据库sqlite),其中包含文件名列表(具有完整的绝对路径)、文件系统元数据(时间戳、大小、权限等)及其标签。可以编写其他脚本来搜索该数据库并以有用的格式返回结果。

例如:

vi $(search-tagged-files --date "last sunday" --keywords thesis)

或者

localc $(search-tagged-files --keywords budget,2017 \
         --mimetype=application/vnd.oasis.opendocument.spreadsheet)

注意:像这样的事情的最大缺点是维护每个文件的标签需要大量的工作。其中一些可以自动化,但大部分都是乏味且耗时的手动工作。这忽略了设计和开发系统所需的时间。

用于创建或编辑文件的程序都不会以任何方式与这样的文件管理系统集成,也不会像mvorcp或 之类的标准工具集成rm

你可以为他们中的许多人编写包装脚本,这些脚本知道这个标签数据库并自动更新它,但如果你使用 GUI 文件浏览器来移动、复制、打开文件等,我什至不知道从哪里开始这样做。 .您可能必须编写自己的文件浏览器。

所涉及的工作可能是大多数有类似想法的人最终想到“我将使用组织良好的目录树来代替”的最大原因。即使编写管理文档的代码所需的工作量也是巨大的,管理每个文件的元数据的工作量甚至更大 - 通常只有对于需要保存至少数万个文档的大型组织来说,这才值得付出努力。踪迹。

这并不是一个新想法,对于这样的想法已经有很多研究和开发。它的名字之一是文件管理系统

答案2

根据我的经验,尝试使用元数据标记文件可能不可靠。并非所有文件管理器都允许您直接查看或修改元数据,并且我的元数据无法转移到不同的系统,或者在 Windows 上的显示方式与在 Linux 上的显示方式不同,反之亦然。

就我个人而言,我采取了类似于该程序的方法标签空间处理它;我将标签添加到文件名本身。

TagSpaces 是这样实现的: Filename [tag1 tag2 tag3].ext

我这样做: Filename #tag1 #tag2 #tag3.ext

我发现这非常有效,尤其是与与热键相关的程序catfish(与 Windows 非常相似)结合使用。Everything由于每个标签都以 开头#,因此如果我搜索该标签,#bills我不必担心返回名称中包含“bills”一词但没有该标签的文件。

我花了很多时间研究使用标签或类似标签的系统组织文件的不同方法,从使用 Evernote 等服务到复杂的文件夹层次结构。这是我能找到的最简单、最无缝的方法,并且与操作系统无关。

相关内容