it-swarm.com.de

Wie schließe ich Verzeichnisse beim Auflisten von Dateien aus?

Wie schließe ich Verzeichnisse aus, wenn ich Dateien im aktuellen Verzeichnis aufführe?

ls .

^ wird Verzeichnisse in die Liste aufnehmen.

22
Stephen Watkins

Probier diese:

find . -maxdepth 1 -not -type d
23

Um es genau gleichwertig mit ls . Zu erhalten, müssen Sie keine versteckten Verzeichnisse anzeigen.

find . -maxdepth 1 -not -type d -and -not -name '.*'

und das lässt Sie immer noch mit './' vor jedem Dateinamen. Das ist nicht wirklich ein Problem, aber ich finde es irgendwie hässlich. Ich ging mit:

ls -p | grep -v '/$'

Dadurch erhalten Sie eine Liste, die gleich aussieht, und Sie können zusätzliche ls - Argumente hinzufügen. Wenn Sie einen --color=always Hinzufügen, erhalten Sie Ihre Dircolors zurück oder -a, Um versteckte Dateien anzuzeigen.

Ich mag Alexanders Antwort, weil er tatsächlich von einem Dateisystem abhängt, das für die betreffende Datei charakteristisch ist, damit sie niemals getäuscht wird. Meine Antwort wird von einer Datei getäuscht, deren Name ein '/' als letztes Zeichen enthält. Aber das scheint nach Ärger zu fragen.

16
Sean O'Leary

versuche dies:

$ find. -Typ f -maxdepth 1

oder dieses:

$ ls -p | egrep -v/$

$ ls -la | egrep -v ^ d

5
jamzed

Es ist zwar ein alter Beitrag, aber ich dachte, das könnte helfen.

$ ls -l | grep -v ^ d

Es werden alle Dateien aufgelistet, einschließlich Symlinks, Zeichen- und Blockdateien.

3
sandeep.s85

Die oben genannten "Find" -Lösungen verlieren einige der Funktionen von ls - zum Beispiel: Nur Dateien auflisten, sortiert nach absteigender Änderungszeit.

Die "ls -p | grep" -Antworten behandeln andere Elemente von ls wie -R nicht elegant, falls sie gewünscht werden

Die folgende Antwort ist zwar ausführlicher, spiegelt jedoch meiner Meinung nach das wahrste ls Verhalten und die größte Flexibilität bei der Auswahl von "nur Dateien" wider.

ls -t . | while read line; do
  if [ -f $line ]; then
    echo $line
  fi 
done

Ersetzen Sie einfach die ls-Schalter wie gewünscht und das Ergebnis wird nur mit Dateien zurückgegeben. Wenn auch Links und andere Elemente erforderlich sind, müsste der Test für die Aufnahme geringfügig überarbeitet werden.

2
Pancho
ls $(file --no-pad  -F' '  * | grep -v directory | cut -d' ' -f1)

Damit können Sie noch alle anderen Optionen verwenden, die ls normalerweise verwendet. Oder ... entferne -v, um nur Verzeichnisse aufzulisten. Oder ... ersetzen Sie das Verzeichnis durch einen anderen Dateityp, den file versteht und meldet, z. B. ASCII, leer, ELF usw.

0
Kaulbach

Ich war auf einem System, auf dem die Binärdatei find-not Nicht unterstützte, und am Ende habe ich Folgendes verwendet:

ls|while read f;do [ -f "$f" ]&& echo $f;done

Vorteile: Verlässt sich nicht auf etwas anderes als sh ls echo
Ist kompatibel mit Bash und Dash
Kann durch Ändern von -f An andere Dinge (z. B. Verzeichnisse) angepasst werden.
Ist am schnellsten als einige der Antworten und verbraucht weniger RAM und CPU

0
Alexx Roche