Wie kann ich ls dazu bringen, eine flache Liste rekursiver Pfade pro Zeile auszuspucken?
Zum Beispiel möchte ich nur eine flache Liste von Dateien mit ihren vollständigen Pfaden:
/home/dreftymac/.
/home/dreftymac/foo.txt
/home/dreftymac/bar.txt
/home/dreftymac/stackoverflow
/home/dreftymac/stackoverflow/alpha.txt
/home/dreftymac/stackoverflow/bravo.txt
/home/dreftymac/stackoverflow/charlie.txt
ls -a1
macht fast das, was ich brauche, aber ich möchte keine Pfadfragmente, ich möchte vollständige Pfade.
bash
command-line
find
ls
dreftymac
quelle
quelle
Antworten:
Wenn Sie wirklich verwenden möchten
ls
, formatieren Sie die Ausgabe mit awk:quelle
awk
Ausdrücke erklären ?Verwenden Sie find:
Wenn Sie nur Dateien möchten (Verzeichnisse, Geräte usw. weglassen):
quelle
ls
Parameter wie--sort=extension
"eingelöst" durch diese Lösung?ls -ld $(find .)
Wenn Sie Ihre Ausgabe nach Änderungszeit sortieren möchten:
ls -ltd $(find .)
quelle
--sort=extension
Parameterls
find . -name "*" -exec ls -ld '{}' \;
(diese funktioniert unabhängig von der Anzahl der Dateien), aber Ihr Befehl ist viel kürzer zu schreiben;)find . -ls
.Versuchen Sie den folgenden einfacheren Weg:
quelle
find "`pwd`"
wenn der Pfad Leerzeichen oder andere Sonderzeichen enthält.find .
? -.-pwd
, werden absolute Pfade gedruckt. Übrigens "Wie ist das anders alsfind
" ;-)Der beste Befehl ist:
tree -fi
Um die Dateien, aber nicht die Links zu verwenden, müssen Sie Folgendes
>
aus Ihrer Ausgabe entfernen :Wenn Sie die Art jeder Datei kennen möchten (um beispielsweise nur ASCII-Dateien zu lesen), mit zwei
while
s:quelle
tree
!brew install tree
, da Sie Homebrew verwendenOh, wirklich eine lange Liste von Antworten. Es hat mir sehr geholfen und schließlich habe ich mein eigenes erstellt, nach dem ich gesucht habe:
So listen Sie alle Dateien in einem Verzeichnis und seinen Unterverzeichnissen auf:
So listen Sie alle Verzeichnisse in einem Verzeichnis und seinen Unterverzeichnissen auf:
So listen Sie alle Verzeichnisse und Dateien in einem Verzeichnis und seinen Unterverzeichnissen auf:
quelle
find "$PWD" -type f | grep '\.json$'
Ich weiß nicht über den vollständigen Pfad Bescheid, aber Sie können ihn
-R
für die Rekursion verwenden. Alternativ können Sie es auch tun, wenn Sie nicht daraufls
aus sindfind *
.quelle
Verwenden Sie keine anderen externen Befehle als ls:
quelle
Praktisch für einige begrenzte Gerätegehäuse, bei denen Suchen / Suchen nicht verfügbar ist.
quelle
awk
?finde / werde den Trick machen
quelle
Mach es nicht kompliziert. Ich habe das gerade benutzt und eine schöne Ausgabe bekommen:
quelle
ls -lR
würde dieses Ziel nicht erreichen.Der einfachste Weg für alle zukünftigen Menschen ist einfach:
Dies zeigt jedoch auch die Größe der Inhalte in den einzelnen Ordnern. Mit awk können Sie nur den Ordnernamen ausgeben:
Edit- Sorry sorry, mein schlechtes. Ich dachte, es würden nur Ordner benötigt. Ich lasse das hier, falls jemand es in Zukunft sowieso braucht ...
quelle
Mit der Freiheit, alle möglichen ls-Optionen zu nutzen:
find -type f | xargs ls -1
quelle
Ich denke für eine flache Liste ist der beste Weg:
(oder um es in einer txt-Datei zu speichern)
quelle
find: illegal option -- D
Führen Sie einen Bash-Befehl mit dem folgenden Format aus:
quelle
Hier ist eine Teilantwort, die die Verzeichnisnamen zeigt.
Erläuterung:
ls -mR *
listet die vollständigen Verzeichnisnamen auf, die mit einem ':' enden, und listet dann die Dateien in diesem Verzeichnis separat aufsed -n 's/://p'
Findet Zeilen, die in einem Doppelpunkt enden, entfernen den Doppelpunkt und drucken die ZeileDurch Durchlaufen der Liste der Verzeichnisse sollten wir auch die Verzeichnisse finden können. Ich arbeite immer noch daran. Es ist eine Herausforderung, die Wildcards durch Xargs zu bekommen.
quelle
Durch Hinzufügen eines Platzhalters am Ende eines ls-Verzeichnisses werden vollständige Pfade erzwungen. Im Moment haben Sie Folgendes:
Sie könnten dies stattdessen tun:
Leider wird hiermit nicht der vollständige Pfad für die rekursiven Verzeichnisse gedruckt, sodass möglicherweise nicht die vollständige Lösung angezeigt wird, nach der Sie suchen.
quelle
Viele Antworten sehe ich. Dies ist meine, und ich denke sehr nützlich, wenn Sie auf einem Mac arbeiten.
Ich bin sicher, Sie wissen, dass es einige "Bundle" -Dateien gibt ( .app , .rtfd , .workflow usw.). Und wenn sie in Finders Fenster schauen, scheinen sie einzelne Dateien zu sein. Aber das sind sie nicht. Und
$ ls
oder$ find
sehen Sie sie als Verzeichnisse ... Wenn Sie also nicht auch deren Inhalt auflisten müssen, funktioniert dies für mich:Dies gilt natürlich für das Arbeitsverzeichnis, und Sie können die Erweiterungen anderer Bundles hinzufügen (jedoch immer mit einem
/
Nachher). Oder andere Erweiterungen, wenn nicht Bundles ohne die/
.Eher interessant das "
.lpdf/
" (mehrsprachiges pdf). Es hat eine normale ".pdf
" Erweiterung (!!) oder keine im Finder. Auf diese Weise erhalten Sie (oder es zählt nur 1 Datei) dafürpdf
und nicht ein paar Sachen ...quelle
ls -lR
ist das, wonach du gesucht hast, oder zumindest war ich es. Prostquelle
ls -lR
würde dieses Ziel nicht erreichen.Wenn das Verzeichnis als relativer Pfad übergeben wird und Sie es in einen absoluten Pfad konvertieren müssen, bevor Sie find aufrufen. Im folgenden Beispiel wird das Verzeichnis als erster Parameter an das Skript übergeben:
quelle
readlink
, können Sie dies tundirectory=$(readlink -e $1)
readlink
Unter OS X 10.5.8 wird die Option -e nicht unterstützt.Dies ist langsam, funktioniert jedoch rekursiv und druckt sowohl Verzeichnisse als auch Dateien. Sie können es mit awk / grep weiterleiten, wenn Sie nur die Dateinamen ohne alle anderen Informationen / Verzeichnisse möchten:
quelle
@ Ghostdog74: Kleine Optimierung mit Ihrer Lösung.
Der folgende Code kann verwendet werden, um Dateien mit ihrem vollständigen absoluten Pfad zu durchsuchen.
quelle
Ich kannte den Dateinamen, wollte aber auch das Verzeichnis.
finde $ PWD | fgrep Dateiname
funktionierte perfekt unter Mac OS 10.12.1
quelle