Recortar los caracteres de escape de la ruta del archivo

Genero rutas de archivos para usar en correos electrónicos arrastrando la carpeta/archivo en cuestión a Terminal.app y luego copiando y pegando el texto generado en un texto de correo electrónico.

La ruta copiada con secuencias de 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

tiene que quedar así:

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

Estoy buscando una forma rápida de eliminar todas las apariciones de caracteres de barra invertida que escapan del carácter de espacio. Alguien mencionó un truco de Finder para hacer eso, pero ahora lo he olvidado.

Traté de crear un servicio de búsqueda para hacer una búsqueda y reemplazo simple en Automator, pero no pude hacerlo. Automator me permitirá hacer que aparezca en Aplicaciones en Servicios (aunque en mi macOS actual parece que no veo ese menú, tal vez deba hacer algo para habilitarlo).

¿Cómo logro esto?

¿Es este un caso de un problema XY ?
Gracias por el comentario, probablemente hago esas cosas, pero en este caso no lo creo. Cita: "Alguien mencionó un truco de Finder para hacer eso, pero ahora lo he olvidado". La respuesta correcta mencionó exactamente eso. Pero otros procesos tienen sus ventajas, ya que se pueden agregar otras funciones a una rutina de Automator oa un script de Perl.

Respuestas (3)

Puede arrastrar a TextEdit en lugar de Terminal. TextEdit no agregará barras invertidas al texto.

Sin embargo, aún puedes usar Terminal. Si escribe echo, luego arrastre y suelte en la Terminal, y luego presione Intro, se eliminarán las barras invertidas (en realidad, están allí precisamente para permitir que los comandos de la terminal manejen la entrada sin formato; no ve barras invertidas, sino un solo echoargumento que contiene caracteres de espacio).

$ 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

Además, puede automatizar la copia del texto canalizando a 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

Ahora el texto deseado estará en su portapapeles.

En una versión anterior de OS X, tengo una función de shell fn2pb: nombre de archivo para pegar, donde están las entrañas de la función pbcopy <<<"$@". Así que escribo fn2pb y luego arrastro un archivo a la ventana de Terminal.app.
  • Seleccione un archivo con un clic derecho
  • Mantenga presionada la tecla Opción
  • Seleccione el elemento de menú Copiar "nombre de archivo" como Nombre de ruta

Nota: Creo que esto solo funciona en El Capitan y superior.

Excelente respuesta! Conozco esta técnica, pero de alguna manera no se me ocurrió :) Terminé aprendiendo y escribiendo un flujo de trabajo de Automator que contenía un script de perl para borrar barras. Estaba usando una espada donde una aguja podría hacer :-|
Gracias. Hará eso :) ¿Puedes editar tu respuesta para mencionar esta restricción?
Funciona en El Capitán, por lo que a partir de esta respuesta, funciona en todas las versiones actuales de macOS.
Gracias alguien me lo habia dicho pero no lo recordaba! Estaba tratando de pegar en el comando Ir a carpeta y cosas así (que no ayudaron).
@NimeshNeema Enlace al flujo de Automator o haga una nueva respuesta aquí. Me gustaría usarlo y agregar algunas otras características (como intercambiar "➝" por el carácter delimitador de carpeta "/", cambiar la fuente, el tamaño, etc.) y convertirlo en un Servicio que pueda invocar en Mail o Finder.
@wide_eyed_pupil Claro, publicaré una nueva respuesta en breve.
@wide_eyed_pupil He agregado mi respuesta que usa el flujo de trabajo de Automator.

Un enfoque simple usando el servicio Automator:

  1. Inicie Automator.app.

  2. En la barra de Menú, vaya a Archivo → Nuevo → Servicio.

  3. En el área del editor, configure las opciones como:

    • Servicio recibe seleccionado :text

    • en :any application

    • La salida reemplaza el texto seleccionado :select check-mark

  4. En la barra lateral derecha, seleccione Biblioteca → Utilidades → Acción Ejecutar script de Shell.

  5. Arrastre y suelte la acción en el área del editor.

  6. En **Ejecutar script de shell*, configure las opciones como:

    • Concha :/bin/bash

    • Pase de entrada :to stdin

  7. En el área del editor Run Shell Script , escriba la siguiente sedlínea de comando:

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

    Tenga en cuenta que el script también contiene caracteres de espacios. Aconsejable editar esta publicación y copiar el guión tal como está.

  8. En el menú de Automator, haga clic en Archivo → Guardar... y guarde el servicio con un nombre adecuado.

  9. Ahora, siempre que seleccione el texto en cualquier aplicación y haga clic con el botón derecho, podrá ver el servicio en el elemento del menú contextual Servicio .

  10. Al invocar el servicio, todas las apariciones de barra invertida seguidas de un carácter de espacio serán reemplazadas solo por el carácter de espacio.

Sí, este es mi método actual, pero busco algo con un solo clic porque lo uso mucho.
Sugirió esto ya que ya está copiando y pegando el texto manualmente desde la Terminal. De hecho, este enfoque agrega un salto adicional.
Gracias Nimesh. Si quiero cambiar para que todos los caracteres escapados digan "\&", ¿a qué cambiaría el script sed? ¿Está usando Grep? Parece ser algo diferente a Grep.