Entferne Escape-Zeichen aus dem Dateipfad

Ich generiere Dateipfade zur Verwendung in E-Mails, indem ich den betreffenden Ordner/die betreffende Datei in Terminal.app ziehe und dann den generierten Text kopiere und in einen E-Mail-Text einfüge.

Der kopierte Pfad mit Escape-Sequenzen:

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

muss so werden:

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

Ich suche nach einer schnellen Möglichkeit, alle Vorkommen von Backslash-Zeichen zu zappen, die dem Leerzeichen entkommen. Jemand hat einen Finder-Trick dafür erwähnt, aber jetzt habe ich ihn vergessen.

Ich habe versucht, einen Finder-Dienst zu erstellen, um ein einfaches Suchen und Ersetzen in Automator durchzuführen, konnte es aber nicht erledigen. Automator erlaubt mir, es in Anwendungen unter Dienste erscheinen zu lassen (obwohl ich dieses Menü auf meinem aktuellen macOS nicht zu sehen scheine, vielleicht muss ich etwas tun, um es zu aktivieren).

Wie mache ich das?

Handelt es sich um ein XY-Problem ?
Danke für den Kommentar, wahrscheinlich mache ich das, aber in diesem Fall glaube ich nicht. Zitat: "Jemand erwähnte einen Finder-Trick dafür, aber jetzt habe ich ihn vergessen." Die richtige Antwort erwähnte genau das. Aber auch andere Prozesse haben ihre Vorteile, da andere Funktionen zu einer Automator-Routine oder einem Perl-Skript hinzugefügt werden können.

Antworten (3)

Sie können anstelle von Terminal in TextEdit ziehen. TextEdit fügt dem Text keine Backslashes hinzu.

Sie können das Terminal jedoch weiterhin verwenden. Wenn Sie eingeben echo, dann per Drag-and-Drop in das Terminal ziehen und dann die Eingabetaste drücken, werden die Backslashes entfernt (eigentlich sind sie genau dazu da, damit Terminalbefehle die Roheingabe verarbeiten können - es werden keine Backslashes echoangezeigt, sondern ein einzelnes Argument Leerzeichen enthalten).

$ 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

Darüber hinaus können Sie das Kopieren des Textes automatisieren, indem Sie an Folgendes weiterleiten 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

Jetzt befindet sich der gewünschte Text in Ihrer Zwischenablage.

Auf einer alten Version von OS X habe ich eine Shell-Funktion fn2pb- Dateiname zum Einfügen, wo die Eingeweide der Funktion sind pbcopy <<<"$@". Also tippe ich fn2pb und ziehe dann eine Datei auf das Terminal.app-Fenster.
  • Wählen Sie eine Datei mit einem Rechtsklick aus
  • Halten Sie die Wahltaste gedrückt
  • Wählen Sie den Menüpunkt „Dateiname“ als Pfadnamen kopieren

Hinweis: Ich glaube, das funktioniert nur in El Capitan und höher.

Hervorragende Antwort! Ich kenne diese Technik, aber irgendwie ist sie mir nicht in den Sinn gekommen :) Am Ende habe ich etwas über einen Automator-Workflow gelernt und einen Automator-Workflow geschrieben, der ein Perl-Skript enthält, um Schrägstriche zu zappen. Benutzte ein Schwert, wo eine Nadel tun konnte :-|
Danke. Werde das tun :) Können Sie Ihre Antwort bearbeiten, um diese Einschränkung zu erwähnen?
Es funktioniert in El Capitan, daher funktioniert es ab dieser Antwort in allen aktuellen Versionen von macOS.
Danke, das hatte mir jemand gesagt, aber ich konnte mich nicht daran erinnern! Ich habe versucht, in den Befehl „Goto Folder“ und ähnliches einzufügen (was nicht geholfen hat).
@NimeshNeema Bitte verlinken Sie auf den Automator-Flow oder machen Sie hier eine neue Antwort. Ich möchte es verwenden und einige andere Funktionen hinzufügen (wie „➝“ durch das Ordnertrennzeichen „/“ ersetzen, die Schriftart, Größe usw. ändern) und es zu einem Dienst machen, den ich in Mail oder Finder aufrufen kann.
@wide_eyed_pupil Sicher, ich werde in Kürze eine neue Antwort posten.
@wide_eyed_pupil Ich habe meine Antwort hinzugefügt, die den Automator-Workflow verwendet.

Ein einfacher Ansatz mit dem Automator-Dienst:

  1. Starten Sie Automator.app.

  2. Gehen Sie in der Menüleiste zu Datei → Neu → Dienst.

  3. Legen Sie im Editorbereich folgende Optionen fest:

    • Dienst erhält ausgewählt :text

    • im :any application

    • Ausgabe ersetzt ausgewählten Text :select check-mark

  4. Wählen Sie in der rechten Seitenleiste Bibliothek → Dienstprogramme → Aktion Shell-Skript ausführen.

  5. Ziehen Sie die Aktion per Drag & Drop in den Editorbereich.

  6. Legen Sie unter **Run Shell Script* folgende Optionen fest:

    • Schale :/bin/bash

    • Eingabe übergeben :to stdin

  7. Geben Sie im Bereich „Run Shell Script Editor“ die folgende sedBefehlszeile ein:

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

    Beachten Sie, dass das Skript auch Leerzeichen enthält. Es ist ratsam, diesen Beitrag zu bearbeiten und das Skript unverändert zu kopieren.

  8. Klicken Sie im Automator-Menü auf Datei → Speichern ... und speichern Sie den Dienst unter einem geeigneten Namen.

  9. Wenn Sie jetzt den Text in einer beliebigen App auswählen und mit der rechten Maustaste klicken, können Sie den Dienst unter dem Kontextmenüelement Dienst sehen .

  10. Beim Aufrufen des Dienstes werden alle Vorkommen von Backslash gefolgt von einem Leerzeichen nur durch das Leerzeichen ersetzt.

Ja, das ist meine aktuelle Methode, aber ich suche nach etwas mit einem Klick, weil ich es so oft benutze.
Vorgeschlagen, da Sie den Text bereits manuell vom Terminal kopieren und einfügen. Dieser Ansatz fügt tatsächlich einen zusätzlichen Hop hinzu.
Danke Nimesh. Wenn ich ändern möchte, dass alle maskierten Zeichen wie "\&" sagen, worauf würde ich das sed-Skript ändern? Wird Grep verwendet, scheint es etwas anderes als Grep zu sein.