Unterschied zwischen `ls -d */` und `ls -d *`?

Unterschied zwischen `ls -d */` und `ls -d *`?

Ich habe Mühe zu verstehen, wie ls -d funktioniert. Ich habe die anderen ls -d-Fragen durchgelesen, aber keine davon fragt, warum es ls -d *nicht genauso funktioniert wie ls -d */. Warum ist das Trennzeichen am Ende so wichtig?

ls *und ls */sich gleich verhalten, also habe ich erwartet, ls -d *dass ls -d */sie auch gleich funktionieren.

Stattdessen ls -d *werden alle Dateien im aktuellen Verzeichnis aufgelistet, genau wie bei ls, wobei ls -d */das Verzeichnis im aktuellen Verzeichnis aufgelistet wird. Warum ist das so?

Antwort1

ls *und ls */sich genauso verhalten.

Nein, das tun sie nicht. Wenn Sie Dateien in Ihrem Arbeitsverzeichnis haben, werden diese mit dem ersten Befehl aufgelistet, mit dem zweiten jedoch nicht.

lslistet die Dateien und Verzeichnisse (einschließlich deren Inhalt) auf, die auf der Kommandozeile übergeben wurden. Wenn Sie Shell-Globbing verwenden, ersetzt Ihre Shell dieMuster"mit einer alphabetisch sortierten Liste von Dateinamen" (vgl.Dateinamenerweiterung).

Das Muster *stimmt mit jeder Datei und jedem Verzeichnis im aktuellen Verzeichnis überein (ausgenommen versteckte Dateien, die mit beginnen .), während */nur mit Verzeichnissen übereinstimmt (ausgenommen versteckte Verzeichnisse).

Der Schalter -ddeaktiviert die Inhaltsauflistung für Verzeichnisse, aber an ls übergebene Dateien werden weiterhin aufgelistet.

Antwort2

Die Antwort lautet: Die Endung /zwingt ls, nur Verzeichnisse durchzusehen.

Bitte beachten Sie, dass das Verhalten konsistent ist (mit und ohne -d).

Ein kleiner Test:

mkdir /tmp/test
touch /tmp/test/a
mkdir /tmp/test/b
touch /tmp/test/b/c
cd /tmp/test

Und dann tun Sie es ls *und ls */Sie werden den Unterschied bemerken.

verwandte Informationen