Find Show Slash nach Verzeichnissen setzen?

19

Wie kann ich dafür sorgen, dass der Befehl find nach Verzeichnissen einen Schrägstrich anzeigt? Zum Beispiel möchte ich dirals dir/statt zeigen dir. Ich benutzefind . -print

Steven
quelle

Antworten:

10

Tragbar:

find . -type d -exec sh -c 'printf "%s/\n" "$0"' {} \; -or -print

Wenn Sie Verzeichnisse und Dateien separat auflisten möchten (Sie können die Ausgabe durch Sortieren zusammenführen):

{ find . -type d -print | sed 's!$!/!'; find . \! -type d; } | sort

Siehe Shawn J. Goffs Antwort zu GNU find .

Wenn Sie das Risiko eingehen möchten, dass nicht druckbare Zeichen beschädigt werden, auch wenn sie nicht auf einem Terminal ausgegeben werden , lesen Sie die Antwort von ddeimeke .

In zsh: print -rl -- **/*(DM)( Dum Punktdateien einzuschließen, Mum ein /After-Verzeichnis hinzuzufügen )

Gilles 'SO - hör auf böse zu sein'
quelle
Der erste Befehl hat für mich keine abschließenden Schrägstriche ausgegeben, der zweite jedoch.
Steven
15
find . \( -type d -printf "%p/\n" , -type f -print \)

Dies verwendet den Befehl printf, um Verzeichnisnamen und den Standarddruck für den Rest zu formatieren.

Shawn J. Goff
quelle
Ich bin immer wieder erstaunt über die Flexibilität von find.
Shawn J. Goff
1
Beachten Sie, dass dies -printfspezifisch für GNU find ist.
Gilles 'SO - hör auf böse zu sein'
Gute Antwort. Mir gefällt, wie finddie Positionsargumente es ermöglichen, erweiterte Ausgaben wie diese zu erstellen. Beachten Sie jedoch, dass dies ohne die Leerzeichen um das Komma nicht funktioniert.
16.
1
Auf der Grundlage dieser Antwort und von Gilles habe ich die folgende vereinfachte Version erstellt:find . -type d -printf '%p/\n' -or -print
Teresa und Junior,
8

Vielleicht

find . -print0 | xargs -0 ls -Fd

ist auch eine Option.

Aus einer Solaris-Manpage:

-F Markiert Verzeichnisse mit einem abschließenden Schrägstrich (/), Türen mit einem abschließenden Größer-als-Zeichen (>), ausführbare Dateien mit einem abschließenden Stern (*), FIFOs mit einem abschließenden vertikalen Strich (|), symbolische Links mit einem abschließenden " at "sign (@) und Sockets der AF_UNIX-Adressfamilie mit einem trailingequals-Zeichen (=). Verfolgt als Operanden benannte Symlinks.

ddeimeke
quelle
@ Gilles: Danke für das "d" ;-)
ddeimeke
Dies erhöht die Anzahl der Systemanrufe
Paweł Polewicz