Как удалить тег трекера, содержащий специальные символы

«трекер» - это инструмент для индексирования и поиска файлов из командной строки. Помимо прочего, он позволяет помечать файлы тегами. Я пытаюсь удалить тег из файла 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

Обратите внимание на новую строку в имени тега после «спецификаций».

(Я заменил здесь FILEPATH вместо фактического имени файла. Кажется, это не имеет отношения. Я успешно удалил другие теги в аналогичных путях раньше и переместил этот файл на всякий случай, но я по-прежнему не могу удалить свой тег)

Мне не удается удалить этот тег, используя тег отслеживания -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

Это сообщение, опять же, ложь. Тег все еще присутствует.

Я использую Bash на Ubuntu 20.10 Groovy. У меня есть права собственности и права на запись в файл с тегами, хотя я не думаю, что это требуется.

2
задан 9 June 2021 в 18:44

1 ответ

Обратные косые черты поддерживаются в контексте встроенных модулей оболочки printf и echo (с опцией -e), но чтобы заставить их быть развернутыми в аргументе простой строки, вам придется использовать ANSI кавычки. Из man bash:

 Слова вида $'string' обрабатываются особым образом. Слово расширяется до
 string, с заменой символов с обратной косой чертой, как определено стандартом
 стандартом ANSI C.

В вашем случае это немного сложнее, поскольку в строке тегов есть одинарная кавычка (апостроф), но следующее должно сработать:

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.

1
ответ дан 28 July 2021 в 11:30

Другие вопросы по тегам:

Похожие вопросы: