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 ls
Befehl 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
ls
Wenn Sie es mit einem Verzeichnisargument aufrufen, wird standardmäßig der Inhalt des Verzeichnisses angezeigt. Sie können dieses Verhalten mit der -d
Option ändern. Vonman ls
-d, --directory
list directory entries instead of contents, and do not derefer‐
ence symbolic links