Ich möchte eine Liste aller Dateien in einem Verzeichnis erstellen, ohne eines der Unterverzeichnisse aufzulisten, die sich in demselben Verzeichnis befinden, und diese Liste in einer neuen Datei ausdrucken.
ls -d * > filelist
erstellt eine Liste aller Dateien im aktuellen Verzeichnis, listet jedoch auch die Unterverzeichnisse im aktuellen Verzeichnis auf. Ich habe den find
Befehl mit der -maxdepth 1
Option ausprobiert - das Ausgabeformat ist jedoch ein Problem, da find auch den Pfad zusammen mit den Dateinamen ausgibt.
Wenn jemand mir bitte einen anderen Befehl oder andere Optionen mitteilen kann, die eine Ausgabeliste nur der Dateien in einem Verzeichnis und nicht der Namen der Unterverzeichnisse oder ihres Inhalts erzeugen, würde ich es begrüßen.
ls -d *
, liste hier nur die Dateien und Ordner im aktuellen Ordner auf, ausgenommen versteckte Dateien / Ordner.Antworten:
Auf der Suche basierende Lösung:
Bash-basierte Lösung:
Mit der bash-basierten Lösung erhalten Sie alles, was kein Verzeichnis ist. Es wird Dinge wie Named Pipes enthalten (das möchten Sie wahrscheinlich). Wenn Sie speziell nur Dateien möchten , verwenden Sie entweder den
find
Befehl oder einen der folgenden Befehle:Wenn Sie dies regelmäßig verwenden, können Sie dies natürlich in einen Alias an einer beliebigen Stelle in Ihrem
~/.bashrc
:Da Sie in den Kommentaren festgestellt haben, dass Sie sich tatsächlich unter OSX und nicht unter Ubuntu befinden, empfehle ich Ihnen, beim nächsten Mal Fragen an die Apple- oder allgemeineren Unix- und Linux- Stack-Exchange-Sites zu richten .
quelle
Nur Dateinamen auflisten:
Nur Verzeichnisse auflisten:
grep -v -e ^ $ entfernt leere Zeilen aus dem Ergebnis.
Weitere Details :
ls -p-Flag setzt '/' am Ende des Verzeichnisnamens, -R-Flag für die rekursive Suche, -l für die Auflistung mit Informationen, -a für die Auflistung aller (einschließlich versteckter Dateien) mit Informationen, grep -v Flag ist für die Ergebnisinvertierung und -e Flag für die Regex-Übereinstimmung.
quelle
So listen Sie nur reguläre Dateien auf:
Mit symbolischen Links enthalten:
Wo das erste Zeichen der Liste den Dateityp beschreibt,
-
bedeutet dies, dass es sich um eine reguläre Datei handelt, für die eine symbolische Verknüpfung bestehtl
.Debian / Ubuntu
Geben Sie die Namen aller übereinstimmenden Dateien (einschließlich Links) aus:
Mit absoluten Pfaden:
Drucken Sie die Namen aller Dateien
/etc
, die mit beginnenp
und mit endend
:quelle
Noch eine andere Lösung, eine naiv kurze, die für mich funktioniert hat:
quelle
ls -alR |grep -E '^-'
Ich würde vorschlagen, find zu verwenden und bei Bedarf den Verzeichnisnamen aus der Ausgabe zu entfernen:
quelle
-maxdepth 1
sollte vor allen Filtern stehen, und Sie können dieses Ergebnis erzielen, ohnesed
die-printf
Option zu verwenden, dh:find . -maxdepth 1 -type f -printf '%f\n'
(Dies ist effizienter als die Verwendung eines zusätzlichen Programms).Eine andere mögliche Option ist
Das
--file-type
setzt ein / am Ende der Ordner (aber auch ein @ am Ende der symbolischen Links.The grep -v '/'
Entfernt die Unterverzeichnisse (weil sie jetzt mit einem '/' enden). Dassed s/@$//
entfernt das @. Das -1 gibt eine Datei pro Zeile aus damit das grep -v richtig funktioniert.quelle
-1
Es spielt keine Rolle, ob Sie es brauchen oder nicht. Wenn Sie versteckte Dateien-a
ls
ls -F | grep -v '/' | sed s/[@*]$// > filelist