Обрезать escape-символы из пути к файлу


3

Я генерирую пути к файлам для использования в электронных письмах, перетаскивая нужную папку / файл в Terminal.app, затем копируя и вставляя сгенерированный текст в текст электронного письма.

Скопированный путь с escape-последовательностями:

pCloud\ Drive/SEN\ pCloud/SEN\ Tech\ Team/Clean\ Energy\ WA\ Study\2016/For\ checking/AB\ checks/SEN\ RE\ SWIS\ 2030\ notes\ for\ AB\checks\ -\ Backup\ input\ table\ tab\ \(5.1.16\).docx

должен стать таким:

pCloud Drive/SEN pCloud/SEN Tech Team/Clean Energy WA Study 2016/For checking/AB checks/SEN RE SWIS 2030 notes for AB\checks - Backup input table tab \(5.1.16\).docx

Я ищу быстрый способ убрать все вхождения символа обратной косой черты, избегая пробела. Кто-то упомянул трюк Finder для этого, но теперь я забыл это.

Я пытался создать Finder Service, чтобы выполнить простой поиск и замену в Automator, но не смог этого сделать. Automator позволит мне отображать его в приложениях в разделе «Службы» (хотя в моем текущем macOS я не вижу этого меню, возможно, мне нужно что-то сделать, чтобы включить его).

Как мне это сделать?


2
Это случай проблемы XY ?
user2397282

Спасибо за комментарий, я, наверное, кое-что делаю, но в этом случае я так не думаю. Цитата: «Кто-то упомянул трюк Finder для этого, но теперь я забыл это». Правильный ответ упомянул именно это. Но другие процессы имеют свои преимущества, так как другие функции могут быть добавлены в процедуру Automator или сценарий perl.
wide_eyed_pupil

Ответы:


7
  • Выберите файл с правой кнопкой мыши
  • Удерживайте клавишу Option
  • Выберите пункт меню Копировать «имя файла» в качестве пути

Примечание: я считаю, что это работает только в Эль-Капитане и выше.


1
Отличный ответ! Я знаю об этой технике, но как-то мне это не приходило в голову :) В итоге я изучил и написал рабочий процесс Automator, содержащий сценарий perl для удаления косой черты. Использовал меч, где иголка могла сделать: - |
Нимеш Нима

Благодарю. Будет ли это делать :) Можете ли вы отредактировать свой ответ, чтобы упомянуть об этом ограничении?
Нимеш Нима

1
Он работает в El Capitan, поэтому на данный момент он работает во всех текущих версиях macOS.
Аллан

Спасибо, кто-то сказал мне это, но я не мог вспомнить это! Я пытался вставить команду Goto Folder и тому подобное (что не помогло).
wide_eyed_pupil

1
@NimeshNeema Пожалуйста, свяжись с потоком Automator или сделай новый ответ здесь. Я хотел бы использовать его и добавить некоторые другие функции (например, поменять местами "➝" для символа разделителя папок "/", изменить шрифт, размер и т. Д.) И сделать его службой, которую я могу вызывать в Mail или Finder.
wide_eyed_pupil

2

Вы можете перетащить в TextEdit вместо терминала. TextEdit не будет добавлять обратную косую черту к тексту.

Вы все еще можете использовать терминал, хотя. Если вы напечатаете echo, затем перетащите в терминал, а затем нажмете Enter, обратные слэши будут удалены (на самом деле, они там именно для того, чтобы позволить командам терминала обрабатывать необработанный ввод - echoне видит обратные слэши, но один аргумент содержащие пробелы).

$ echo pCloud\ Drive/SEN\ pCloud/SEN\ Tech\ Team/Clean\ Energy\ WA\ Study\2016/For\ checking/AB\ checks/SEN\ RE\ SWIS\ 2030\ notes\ for\ AB\checks\ -\ Backup\ input\ table\ tab\ \(5.1.16\).docx
pCloud Drive/SEN pCloud/SEN Tech Team/Clean Energy WA Study2016/For checking/AB checks/SEN RE SWIS 2030 notes for ABchecks - Backup input table tab (5.1.16).docx

Кроме того, вы можете автоматизировать копирование текста, отправив по адресу pbcopy:

$ echo pCloud\ Drive/SEN\ pCloud/SEN\ Tech\ Team/Clean\ Energy\ WA\ Study\2016/For\ checking/AB\ checks/SEN\ RE\ SWIS\ 2030\ notes\ for\ AB\checks\ -\ Backup\ input\ table\ tab\ \(5.1.16\).docx | pbcopy

Теперь нужный текст будет в вашем буфере обмена.


1
В старой версии OS X у меня есть функция оболочки fn2pb- имя файла для монтажа, где находятся функции функции pbcopy <<<"$@". Поэтому я печатаю и fn2pb перетаскиваю файл в окно Terminal.app.
fd0

2

Простой подход с использованием сервиса Automator:

  1. Запустите Automator.app.

  2. В строке меню выберите Файл → Создать → Сервис.

  3. В области редактора установите параметры как:

    • Сервис получает выбранное :text

    • в :any application

    • Вывод заменяет выделенный текст :select check-mark

  4. На правой боковой панели выберите Библиотека → Утилиты → Выполнить действие сценария оболочки.

  5. Перетащите действие в область редактора.

  6. В разделе ** Run Shell Script * установите параметры как:

    • Оболочка :/bin/bash

    • Пройдите ввод :to stdin

  7. В области редактора Run Shell Script введите следующую sedкомандную строку:

    sed 's/\\\ /\ /g'

    Обратите внимание, что скрипт также содержит пробелы символов. Желательно отредактировать этот пост и скопировать скрипт как есть.

  8. В меню Automator выберите Файл → Сохранить ... и сохраните сервис с подходящим именем.

  9. Теперь, когда вы выделите текст в любом приложении и нажмете правой кнопкой мыши, вы увидите сервис в пункте Сервис контекстного меню.

  10. После вызова сервиса все вхождения обратной косой черты, за которыми следует символ пробела, будут заменены только символом пробела.


Да, это мой текущий метод, но я ищу что-то одним щелчком, потому что я так часто его использую.
wide_eyed_pupil

Предложил это, поскольку вы уже копируете текст, вставляя его вручную из терминала. Этот подход действительно добавляет дополнительный прыжок.
Нимеш Нима

Спасибо Нимеш. Если я хочу изменить так, чтобы все экранированные символы, такие как, скажем, "\ &", я бы изменил сценарий sed? Использует ли Grep, кажется, что-то в отличие от Grep.
wide_eyed_pupil
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.