Zeigt es versteckte Dateinamen in allen Verzeichnissen an? Oder nur das aktuelle Verzeichnis (einschließlich aller darin enthaltenen Verzeichnisse)? Ich kann nicht verstehen, warum ls -ld .*
unterschiedliche Ergebnisse zurückgibt (es zeigt versteckte Dateien und Verzeichnisse NUR im aktuellen Verzeichnis, keine Dateien in anderen darin enthaltenen Verzeichnissen)? Auch Was bedeutet -d
allein tun (ls -d
)?
Akzeptierte Antwort:
ls -al .*
zeigt den Inhalt aller Verzeichnisse im aktuellen Verzeichnis, deren Namen mit .
beginnen (d. h. alle, die auf den Shell-Glob .*
passen )
In Bash ist das .*
glob wird zu .
aufgelöst und ..
auch. Seit .
steht für das aktuelle Verzeichnis und ..
des übergeordneten Verzeichnisses, der Inhalt dieser beiden Verzeichnisse, einschließlich aller versteckten Dateien und Verzeichnisse, wird ebenfalls angezeigt.
.*
fängt auch versteckte Dateien im aktuellen Verzeichnis ab, aber sie werden trotzdem als Inhalt von .
aufgelistet
Wie in Wofür steht „ls –directory“ erklärt? das -d
-Flag bewirkt, dass die Verzeichnisse selbst angezeigt werden, anstelle ihres Inhalts.
das ist auch bei dash der Fall, der Shell, die symbolisch mit sh
verknüpft ist bei Ubuntu. Andere Shells, einschließlich zsh und mksh, verhalten sich jedoch intuitiver und enthalten .
nicht und ..
beim Erweitern von .*
. Es ist auch erwähnenswert, dass die meisten Befehle auf ..
ausgeführt werden und .
wenn sie in einem .*
enthalten sind glob (einschließlich chmod
und chown
– damit kann man sein System richtig durcheinander bringen), der rm
Der Befehl wird hilfreicherweise fehlschlagen, dies zu tun.