Score:2

How to delete a tracker tag containing special characters

ธง kn

'tracker' is a command-line file indexing and searching tool. Among other things, it allows files to be annotated with tags. I'm trying to delete a tag from a PDF file. Other tags on other files have deleted successfully. This tag name is long and has some special characters in it:

$ 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

Note the newline in the tag name after "specifications".

(I've substituted FILEPATH in here instead of the actual file name. It doesn't seem to be relevant. I've successfully deleted other tags in similar paths before, and have moved this file just in case, but am still unable to delete its tag)

I'm failing to delete this tag, using tracker tag -d TAGNAME, presumably due to my failure to represent or escape the special characters in the tag name. I first tried things like:

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

This reports "Tag was removed successfully", but that's a lie - the tag is still present. This is the message that is displayed when deleting a tag that doesn't exist:

$ tracker tag -d NONEXISTANT
Tag was removed successfully

To make the special characters in the tag name visible, I used:

$ 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'

Here we can see the urlencoded special characters. What I described as a "newline" earlier is actually a %0D%0A, which I think I can pass on the command-line using "\r\n" (Update: this is my mistake, see @steeldriver's answer), hence, maybe my delete should read:

$ 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

This message, again, is a lie. The tag is still present.

I'm in Bash, on Ubuntu 20.10 Groovy. I do have ownership and write permissions to the tagged file, although don't think that is required.

Score:1
ธง hr

การหลีกเครื่องหมายแบ็กสแลชได้รับการสนับสนุนในบริบทของเชลล์ พิมพ์ฉ และ เสียงสะท้อน (กับ -e ตัวเลือก) builtins แต่เพื่อบังคับให้ขยายในอาร์กิวเมนต์สตริงธรรมดาคุณต้องใช้ ANSI quoting จาก ผู้ชายทุบตี:

   คำในรูปแบบ $'string' ได้รับการปฏิบัติเป็นพิเศษ คำขยายความถึง
   สตริงที่มีอักขระหลีกเครื่องหมายแบ็กสแลชแทนที่ตามที่ระบุโดย
   มาตรฐาน ANSI C

ในกรณีของคุณอาจซับซ้อนเล็กน้อยเนื่องจากมีเครื่องหมายอัญประกาศเดี่ยว (เครื่องหมายอัญประกาศเดี่ยว) ในสตริงแท็ก แต่สิ่งต่อไปนี้ควรใช้งานได้:

แท็กตัวติดตาม -d $'setup# connections# features# การอัปเกรด# การแก้ไขปัญหา# การกู้คืน# ข้อมูลจำเพาะ\r\n#esuprt_desktop#esuprt_alienware_dsk#Alienware Aurora#alienware-aurora#Owner'\''s Manual'

หรือคุณสามารถเขียนไฟล์ Cr ตัวอักษรโดยใช้ลำดับแป้นพิมพ์ Ctrl+วี เข้า (จะแสดงเป็น ^ม แต่จริงๆแล้วเป็นเพียงตัวละครเดียวเท่านั้น) อย่าลืมติดตามกันด้วยน้าา เข้า สำหรับ เอลฟ์.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา