如何删除包含特殊字符的跟踪器标签

如何删除包含特殊字符的跟踪器标签

“tracker” 是一个命令行文件索引和搜索工具。除其他功能外,它还允许使用标签注释文件。我正在尝试从 PDF 文件中删除标签。其他文件上的其他标签已成功删除。此标签名称很长,其中包含一些特殊字符:

$ tracker tag -ts
Tags (shown by name):
  setup# connections# features# upgrading# troubleshooting# recovery# specifications
#esuprt_desktop#esuprt_alienware_dsk#Alienware Aurora#alienware-aurora#Owner's Manual 
    file://FILEPATH.pdf

请注意标签名称中“specifications”后面的换行符。

(我在这里用 FILEPATH 代替了实际的文件名。这似乎并不相关。我之前已经成功删除了类似路径中的其他标签,并且为了以防万一移动了这个文件,但仍然无法删除它的标签)

我无法使用 删除此标签tracker tag -d TAGNAME,大概是因为我无法表示或转义标签名称中的特殊字符。我首先尝试了以下方法:

$ tracker tag -d "setup# connections# features# upgrading# troubleshooting# recovery# specifications
#esuprt_desktop#esuprt_alienware_dsk#Alienware Aurora#alienware-aurora#Owner's Manual"

这会报告“标签已成功删除”,但这是谎言 - 标签仍然存在。这是删除不存在的标签时显示的消息:

$ tracker tag -d NONEXISTANT
Tag was removed successfully

为了使标签名称中的特殊字符可见,我使用了:

$ tracker info 'file://FILEPATH.pdf' | grep hasTag
  'nao:hasTag' = 'urn:tag:setup%23%20connections%23%20features%23%20upgrading%23%20troubleshooting%23%20recovery%23%20specifications%0D%0A%23esuprt_desktop%23esuprt_alienware_dsk%23Alienware%20Aurora%23alienware-aurora%23Owner's%20Manual'

这里我们可以看到 urlencoded 的特殊字符。我之前描述的“换行符”实际上是 %0D%0A,我认为我可以使用“\r\n”在命令行上传递它(更新:这是我的错误,请参阅@steeldriver 的回答),因此,也许我的删除应该是:

$ tracker tag -d "setup# connections# features# upgrading# troubleshooting# recovery# specifications\r\n#esuprt_desktop#esuprt_alienware_dsk#Alienware Aurora#alienware-aurora#Owner's Manual"
Tag was removed successfully

这条消息又是谎言。标签仍然存在。

我在 Ubuntu 20.10 Groovy 上使用 Bash。我确实拥有标记文件的所有权和写入权限,尽管我不认为这是必需的。

答案1

在 shellprintfecho(带有-e选项的)内置命令的上下文中支持反斜杠转义,但要强制在纯字符串参数中扩展它们,您需要使用 ANSI 引用。来自man bash

   Words of the form $'string' are treated specially.  The word expands to
   string,  with backslash-escaped characters replaced as specified by the
   ANSI C standard.

您的情况有点复杂,因为标签字符串中有一个单引号(撇号),但以下内容应该有效:

tracker tag -d $'setup# connections# features# upgrading# troubleshooting# recovery# specifications\r\n#esuprt_desktop#esuprt_alienware_dsk#Alienware Aurora#alienware-aurora#Owner'\''s Manual'

或者,您可以CR使用键盘序列Ctrl+来编写字符V Enter(它将显示为^M但实际上只是一个字符)。不要忘记在其后跟另一个Enter字符LF

相关内容