Обрезать 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 я не вижу этого меню, возможно, мне нужно что-то сделать, чтобы включить его).

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

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

Ответы:

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

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

fd0
источник
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

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

BallpointBen
источник
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