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