Wie kann ich alle Dateien eines Ordners auflisten, jedoch nicht deren Ordner oder Unterdateien? Mit anderen Worten: Wie kann ich nur die Dateien auflisten?
bash
file-listing
Rodrigo
quelle
quelle
Antworten:
Verwenden von
find
:find . -maxdepth 1 -type f
Durch die Verwendung der
-maxdepth 1
Option wird sichergestellt, dass Sie nur im aktuellen Verzeichnis suchen (oder, wenn Sie das.
durch einen Pfad ersetzen , in diesem Verzeichnis). Wenn Sie eine vollständige rekursive Liste aller Dateien in diesem und in den Unterverzeichnissen wünschen, entfernen Sie einfach diese Option.quelle
find
Auf dem Mac gibt es weder Optionen-type
noch-maxdepth
Optionen.-type
und-maxdepth
sind keine Optionen im normalen Sinne; BSDfind
(wie unter OS X verwendet) nennt sie primär und muss nach den Dateinamenoperanden stehen (.
in diesem Fall; beachten Sie, dass die BSD-Version im Gegensatz zu Linux mindestens einen expliziten Dateinamenoperanden benötigt). Der Befehl in dieser Antwort funktioniert definitiv auf einem Mac.find *.png -maxdepth 0 -type f
das vermeiden./
Präfix in den Ausgabedateinamen, auch die Kenntnis-maxdepth
von0
nicht1
), solange alles , was Sie brauchen , ist die Dateinamen in alphabetischer Reihenfolge . Wenn Sie möchten, was Siels
sonst noch tun können (anderes Ausgabeformat / Reihenfolge, Inline-Kontrolle darüber, ob versteckte Elemente enthalten sind oder nicht), ergänzt durch Filterung vom Typ [Multi], kann das Skript aus meiner Antwort helfen.find * -maxdepth 0 -type f
(eine Alternative, die aus dem Kommentar von @ AlexHall abgeleitet wurde) mitfind . -maxdepth 1 -type f
der Antwort:find . ...
Enthält immer versteckte Elemente, stellt Ausgabedateinamen immer voran./
und gibt bei GNUfind
(Linux) normalerweise eine unsortierte Liste aus.find * ...
Da die Shell von vornherein Globbing ausführen kann, werden versteckte Elemente standardmäßig ausgeschlossen (können mit geändert werdenshopt -s dotglob
), und es werden lediglich Dateinamen (kein Präfix) ausgegeben, die alphabetisch sortiert sind. Keiner der beiden Ansätze enthält Symlinks zu Dateien. Verwenden Sie dazu die Option-L
.Mit ls -p können Sie / nach dem Ordnernamen anzeigen, der als Tag zum Entfernen dient.
quelle
ls
zu sehenfind
, das zusätzlich zu verwendet , da letzteres relative Pfade und erstere nur Dateinamen zurückgibt. Verwenden Sie das richtige Werkzeug für den Job.Die auf carlpett
find
basierende Antwort (find . -maxdepth 1 -type f
) funktioniert im Prinzip, entspricht jedoch nicht ganz der Verwendung vonls
: Sie erhalten eine möglicherweise unsortierte Liste von Dateinamen, denen alle vorangestellt sind./
, und Sie verlieren die Möglichkeit, diels
vielen Optionen anzuwenden .auch
find
immer findet versteckt auch Elemente , während dasls
Verhalten auf das Vorhandensein oder Fehlen der abhängig-a
oder-A
Optionen.Eine Verbesserung , die Alex Hall in einem Kommentar zu dieser Frage vorgeschlagen hat, besteht darin , Shell Globbing
find
zu kombinieren mit :find * -maxdepth 0 -type f # find -L * ... includes symlinks to files
ls
die vielen anderen Sortier- / Ausgabeformatoptionen.Die Antwort von Hans Roggeman
ls
+grep
ist pragmatisch, sperrt Sie jedoch in die Verwendung des Long (-l
) - Ausgabeformats .Um diese Einschränkungen zu adressieren ich das schrieb
fls
( f iltering ls ) Dienstprogramm ,ls
bietet und gleichzeitig Typfilterfunktionen bietet ;f
für Dateien,d
Verzeichnisse undl
Symlinks, vor einer Liste vonls
Argumenten (ausführenfls --help
oderfls --man
um weitere Informationen zu erhalten).Beispiele:
fls f # list all files in current dir. fls d -tA ~ # list dirs. in home dir., including hidden ones, most recent first fls f^l /usr/local/bin/c* # List matches that are files, but not (^) symlinks (l)
Installation
Unterstützte Plattformen
Aus der npm-Registrierung
Hinweis: Auch wenn Sie Node.js nicht verwenden
npm
, funktioniert der Paketmanager plattformübergreifend und ist einfach zu installieren. Versuchencurl -L https://git.io/n-install | bash
Mit Node.js installiert ist , müssen Sie wie folgt vor :
Hinweis :
Ob Sie dies benötigen,
sudo
hängt davon ab, wie Sie Node.js / io.js installiert haben und ob Sie die Berechtigungen später geändert haben . Wenn Sie eineEACCES
Fehlermeldung erhalten, versuchen Sie es erneut mitsudo
.Das
-g
sorgt für weltweite Installation und benötigt wird , um setzenfls
in Ihrem System$PATH
.Manuelle Installation
bash
Skript als herunterfls
.chmod +x fls
.$PATH
, z. B./usr/local/bin
(macOS) oder/usr/bin
(Linux).quelle
-1
(die Nummer eins);ls
Die Standardeinstellung ist "nackte" Ausgabe, dh nur Dateinamen. Bei der Ausgabe an ein Terminal wird jedoch ein spaltenbasiertes Layout verwendet (mehrere Dateinamen pro Zeile). Um einen Dateinamen pro Ausgabezeile (das ist , was derdir /b
Fall ist, wenn der Speicher dient), verwenden Sie die-1
Option, die auf tatsächlich implizit ist , wenn sich stdout nicht mit einem Terminal verbunden, wie wenn sie an einem Rohr oder einer Ausgabedatei zu senden.Auflisten des Inhalts eines Verzeichnisses ohne Unterverzeichnisse
Ich benutze gerne
ls
Optionen, zum Beispiel:Irgendwann
--color
und alle anderen. (Siehels --help
)Alles außer Ordnern auflisten
Dies zeigt Dateien, Symlinks, Geräte, Pipe, Sockets usw. an.
damit
find /some/path -maxdepth 1 ! -type d
könnte leicht nach Datum sortiert werden:
find /some/path -maxdepth 1 ! -type d -exec ls -hltrF {} +
Nur Dateien auflisten :
oder
find /some/path -maxdepth 1 -type f
sortiert nach Größe:
find /some/path -maxdepth 1 -type f -exec ls -lSF --color {} +
Auflistung versteckter Einträge verhindern :
Um keine versteckten Einträge anzuzeigen, bei denen der Name mit einem Punkt beginnt, können Sie Folgendes hinzufügen
! -name '.*'
:find /some/path -maxdepth 1 ! -type d ! -name '.*' -exec ls -hltrF {} +
Dann
Sie könnten ersetzen ,
/some/path
indem.
auf der Liste für aktuelles Verzeichnis oder..
für übergeordnetes Verzeichnis .quelle
Sie können es auch
ls
mitgrep
oder verwendenegrep
und als Alias in Ihr Profil einfügen:ls -l | egrep -v '^d' ls -l | grep -v '^d'
quelle
Dateien suchen: ls -l / home | grep "^ -" | tr -s '' | cut -d '' -f 9
Verzeichnisse finden: ls -l / home | grep "^ d" | tr -s '' | cut -d '' -f 9
Links finden: ls -l / home | grep "^ l" | tr -s '' | cut -d '' -f 9
tr -s '' wandelt die Ausgabe in eine durch Leerzeichen getrennte Datei um. Der Befehl cut gibt an, dass das Trennzeichen ein Leerzeichen ist, und gibt das 9. Feld zurück (immer den Dateinamen / Verzeichnisnamen / Linknamen).
Ich benutze das die ganze Zeit!
quelle
{ find . -maxdepth 1 -type f | xargs ls -1t | less; }
hinzugefügt
xargs
, damit es funktioniert, und verwendet,-1
anstatt-l
nur Dateinamen ohne zusätzlichels
Informationen anzuzeigenquelle
find -printf0 '...' | sort -z
Ich füge nur die Antwort von Carlpett hinzu. Für eine sehr nützliche Ansicht der Dateien können Sie die Ausgabe an ls weiterleiten.
find . -maxdepth 1 -type f|ls -lt|less
Zeigt die zuletzt geänderten Dateien in einem Listenformat an. Dies ist sehr nützlich, wenn Sie viele Dateien heruntergeladen haben und eine übersichtliche Version der letzten Dateien anzeigen möchten.
quelle
ls
liest keine Standardeingabe, daher ist es sinnlos, irgendetwas an Pipe weiterzuleitenls
. Haben Sie vermissenxargs
?find
Befehl in dieser Antwort wird vollständig ignoriert . Der Gesamtbefehl ist derselbe wiels -lt | less
, der keine Typfilterung durchführt.find
könnte man das allerdings machenfind . -maxdepth 1 -type f -ls
. Es scheint auch unter Mac OS zu funktionieren, obwohl ich glaube-maxdepth
und-ls
nicht richtig portable Optionen sind."find '-maxdepth'" funktioniert nicht mit meiner alten Version von bash, daher benutze ich:
für f in $ (ls); tun, wenn [-f $ f]; dann echo $ f; fi; getan
quelle
for f in $(ls)
ist doppelt falsch. Sie könnten das mit beheben,for f in *
aber dann würde es kaputt gehen, weil Sie das Argument nichtecho
richtig zitieren .