Verwirrt über das Verhalten des Sternchens im ls-Befehl

Verwirrt über das Verhalten des Sternchens im ls-Befehl

Auf Centos und Debian habe ich dies versucht.

Bedeutet das * im Befehl ls eine rekursive Suche?

Wenn ich anfange, einen Verzeichnisnamen einzutippen und die Tabulatortaste drücke, sehe ich Folgendes:

# ls /etc/rc<tab>
rc0.d/    rc1.d/    rc2.d/    rc3.d/    rc4.d/    rc5.d/    rc6.d/    rc.local  rcS.d/

Ich dachte, wenn ich ein Sternchen in den Pfad einfüge, würde ich dasselbe sehen, aber stattdessen wurde eine rekursive Suche durchgeführt:

# ls /etc/rc*
/etc/rc.local

/etc/rc0.d:
K50netconsole  K90network

/etc/rc1.d:
K50netconsole  K90network

/etc/rc2.d:
K50netconsole  S10network

/etc/rc3.d:
K50netconsole  S10network
...

Der Windows-Befehl „dir“ würde mir nur die Verzeichnisse anzeigen, die mit /etc/rc* übereinstimmen. Wie kann ich dieses Verhalten von ls erhalten (ohne die Tabulatortaste zu verwenden)?

****Bearbeiten/Aktualisieren:

OK, jetzt verstehe ich, dass * von Bash anstelle des Befehls interpretiert wird, aber wird es immer als "Datei- und Ordnereinträge aufzählen" interpretiert oder macht es etwas anderes, wenn ich es in einem anderen Kontext verwende, und wenn ja, gibt es so etwas wie eine große if-Anweisung in Bash, die besagt: "Wenn * mit Dateisystempfaden verwendet wird, werden Datei- und Ordnernamen zurückgegeben, wenn * mit RPM verwendet wird (wierpm -qa post*) Paketnamen zurückgeben usw."

Antwort1

Asterisk wird erweitert, bevor es zum lsBefehl kommt, also ist dies ein Äquivalent zu

ls /etc/rc0.d    /etc/rc1.d   /etc/rc2.d    /etc/rc3.d    /etc/rc4.d ...

Dadurch wird der Inhalt jedes Verzeichnisses separat aufgelistet.

Möglicherweise möchten Sie ls -d /etc/rc*die Auflistung der Dateien in den Verzeichnissen unterdrücken oder einen Befehl verwenden, der nur die Erweiterung anzeigt, z. B. echo /etc/rc*.

Antwort2

lsWenn Sie es mit einem Verzeichnisargument aufrufen, wird standardmäßig der Inhalt des Verzeichnisses angezeigt. Sie können dieses Verhalten mit der -dOption ändern. Vonman ls

-d, --directory
       list  directory entries instead of contents, and do not derefer‐
       ence symbolic links

verwandte Informationen