Wie schließe ich Verzeichnisse aus, wenn ich Dateien im aktuellen Verzeichnis aufliste?
ls .
^ schließt Verzeichnisse in die Auflistung ein.
Wie schließe ich Verzeichnisse aus, wenn ich Dateien im aktuellen Verzeichnis aufliste?
ls .
^ schließt Verzeichnisse in die Auflistung ein.
Antworten:
Probier diese:
find . -maxdepth 1 -not -type d
ls .
ohne Verzeichnisse - und hier ist es.
-ls
oder -exec ls -l {} \;
würde es gerne ls -l
ohne Verzeichnisse machen.
Um genau das ls .
Gleiche zu erreichen , 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 kein wirkliches Problem, aber ich finde es irgendwie hässlich. Ich ging mit:
ls -p | grep -v '/$'
Dadurch erhalten Sie eine Auflistung, die gleich aussieht, und Sie können zusätzliche ls
Argumente hinzufügen . --color=always
Füge ein hinzu und du bekommst deine Farben zurück oder -a
siehst versteckte Dateien.
Ich mag Alexanders Antwort, weil er tatsächlich von einem Dateisystem abhängt, das für die betreffende Datei charakteristisch ist, damit er sich niemals täuschen lässt. Meine Antwort wird von einer Datei getäuscht, deren Name als letztes Zeichen ein '/' enthält. Aber das scheint, als würde es um Ärger bitten.
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.
Die obigen "Find" -Lösungen verlieren einige der Funktionen von ls - zum Beispiel: Nur Dateien auflisten, sortiert in absteigender Änderungszeit.
Die "ls -p | grep" -Antworten befassen sich nicht elegant mit anderen Elementen von ls wie -R, falls sie gewünscht werden sollten
Die folgende Antwort, während ausführliche, meiner Meinung nach spiegelt das wahrste ls Verhalten und höchste Flexibilität für die Auswahl von „Dateien nur“
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 Verknüpfungen und andere Elemente erforderlich sind, müssten geringfügige Nacharbeiten durchgeführt werden, um die Aufnahme zu überprüfen.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Hiermit können Sie noch alle anderen Optionen verwenden, die ls
normalerweise in Anspruch genommen werden. Oder ... entfernen, -v
um nur Verzeichnisse aufzulisten. Oder ... ersetzen Sie das Verzeichnis durch einen anderen Dateityp, der file
ASCII, leer, ELF usw. versteht und meldet.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
ist in meinen Tests ungefähr 3x schneller
Ich befand mich auf einem System, das die find
Binärdatei nicht unterstützte, -not
und verwendete schließlich:
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 geändert werden, um mit anderen Dingen (z. B. Verzeichnissen) übereinzustimmen, indem -f
Is am schnellsten geändert wird als einige der Antworten. Benötigt weniger RAM und CPU