Befehl "Suchen" des Mac-Terminals: Was bedeutet ein doppelter Schrägstrich in der Ergebnisausgabe?

9

Ich benutze den Befehl find für die Suche in großen und verschachtelten Verzeichnisstrukturen.

In der Ergebnisausgabe ist manchmal ein doppelter Schrägstrich (//) enthalten.

Beispiel (nach "Downloads"):

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf

Ich dachte zuerst, es würde das aktuelle Arbeitsverzeichnis markieren. Das ist aber nicht der Fall.

Was bedeutet dieser doppelte Schrägstrich?

Normalerweise kopiere ich das Ergebnis in die Zwischenablage und wechsle zum Finder. Dann "verschieben" + "Befehl" + "g" und den Pfad (bis zur Datei) in die Box einfügen. Damit wird das enthaltende Verzeichnis geöffnet.

Funktioniert gut. Aber den doppelten Schrägstrich muss ich manuell entfernen.

Deshalb: Wie kann ich das vermeiden?

Mizech
quelle
2
Beachten Sie, dass Sie den doppelten Schrägstrich nicht entfernen müssen. Ein doppelter Schrägstrich ist nur am Anfang eines Pfades etwas Besonderes und nur dann, wenn es sich genau um zwei Schrägstriche handelt. Mehrere Schrägstriche in der Mitte oder am Ende oder eine beliebige Anzahl von Schrägstrichen als genau zwei am Anfang entsprechen genau einem Schrägstrich. Dies wird durch die POSIX / SUS-Spezifikation garantiert.
Jörg W Mittag

Antworten:

17

findist eher wörtlich. Wenn Sie es anweisen, in "~ / Downloads /" zu suchen, wird es (einschließlich des abschließenden Schrägstrichs) als Präfix für alles verwendet, was es findet. Da am Ende des von Ihnen angegebenen Pfads ein unnötiger und irrelevanter Schrägstrich angezeigt wird, wird die Ausgabe mit einem unnötigen und irrelevanten zusätzlichen Schrägstrich versehen.

Lösung: Entfernen Sie das nachfolgende "/" aus dem Suchverzeichnis:

#> find ~/Downloads/ -iregex ".*some.*"
/Users/michael/Downloads//subDirectory/some_file.pdf
#> find ~/Downloads -iregex ".*some.*"
/Users/michael/Downloads/subDirectory/some_file.pdf
Gordon Davisson
quelle
4

Was bedeutet dieser doppelte Schrägstrich?

Bedeutet, dass Sie einen seltsamen alten BSD-Fund verwenden.

Wie kann ich das vermeiden?

Sie können den abschließenden Schrägstrich in Ihrem ursprünglichen Befehl zwar weglassen, aber da er automatisch über die Tab-Vervollständigung hinzugefügt wird (die Sie auf jeden Fall so gut wie möglich nutzen sollten) und der abschließende Schrägstrich tatsächlich an unzähligen Stellen an anderer Stelle verwendet wird, um sicherzugehen, dass Sie Es handelt sich um ein Verzeichnis und nicht um einen Dateinamen. Das Weglassen ist nicht intuitiv und albern.

Stattdessen schlage ich vor, eines dieser anderen Dinge zu tun:

a) Machen Sie eine Hülle, um herauszufinden, welche Rohre sed: | sed 's @ // @ / @'

b) Installieren Sie die Findutils von GNU mit 'Brew Install Findutils' und verwenden Sie dann entweder 'gfind' direkt, den Alias ​​'find' zu 'gfind' oder fügen Sie Ihrem Pfad / usr / local / opt / findutils / libexec / gnubin hinzu (was ebenfalls hinzugefügt wird) GNU findutils '' Locate '', 'Updatedb' & 'Xargs').

c) Wechseln Sie zu einem geeigneten GNU / Linux-Betriebssystem, das dieses Problem (und tausend andere) überhaupt nicht gehabt hätte. : p

Jan Kyu Peblik
quelle
1
Fügen set mark-directories offSie einfach zu Ihrem hinzu. inputrcund du bist gut zu gehen. Von einem dieser alten BSD-Leute.
fd0
@ fd0 dann könnte man nicht zwischen dirs und gleichnamigen Dateien unterscheiden; Es ist BSDs Fund, der hier ein wenig mürrisch ist, nicht Bash oder Readline
Jan Kyu Peblik