Was ist der Unterschied zwischen diesen ls-Befehlszeilenargumenten: -d vs *

325
Jibin

Was ist der Unterschied zwischen

ls /example or ls /example/ 

vs

ls -d /example/* 

Warum geben sie (fast) die gleiche Ausgabe?

0

2 Antworten auf die Frage

2
grawity

Im ersten Fall geben Sie ls ein Verzeichnis an und bitten Sie, dessen Inhalt anzuzeigen.

Im zweiten Fall geben Sie ls bereits den Inhalt direkt an (eine Liste der einzelnen Dateien und Unterverzeichnisse) und bitten Sie, genau diese Elemente anzuzeigen, jedoch nicht deren weiteren Inhalt.

Also diese geben die gleiche Leistung, weil sie tun fast das gleiche, außer in den ersteren Fall ls selbst bestimmt, welche Inhalte es zu zeigen braucht, während im letzteren Fall sind Sie es eine vorgegebene Liste geben.


Ls hat zwei Modi: Wenn eine Datei angegeben ist, wird nur diese Datei angezeigt. Wenn ein Verzeichnis angegeben ist, wird der Inhalt dieses Verzeichnisses angezeigt (eine Ebene tief).

Ihr /exampleVerzeichnis ist ein Verzeichnis. Wenn Sie es verwenden ls /example, zeigt ls seinen Inhalt an. Die -dOption deaktiviert dieses Verhalten und bewirkt, dass ls immer nur das angegebene Element anzeigt, unabhängig davon, ob es sich um eine Datei handelt oder nicht.

(Vergleichen Sie: ls -l /etcund ls -l -d /etc)

Wenn Sie es verwenden ls -d /example/*, fordern Sie es jedoch nicht auf, ein Verzeichnis anzuzeigen - Sie geben ihm eine Liste der einzelnen Elemente, die angezeigt werden sollen. Die Platzhalter werden von Ihrer Shell erweitert, bevor der Befehl ausgeführt wird ls -d /example/file1 /example/file2 /example/file3. Sie werden also wirklich ausgeführt .

1
xenoid

Wenn ein Argument lsein Verzeichnis ist, wird lsdas Verzeichnis aufgerufen und der Inhalt des Verzeichnisses aufgeführt, sofern es nicht mit aufgerufen wurde -d. Denken Sie daran, dass die Dateinamenserweiterung ('Datei *') in der Shell ausgeführt wird, bevor Sie ls aufrufen.

dir ├── file1 └── subdir └── file2 
  • ls dirlistet den Inhalt von dir(eine Zeile für file1, eine für subdir) auf
  • ls -d dirnur Listen dir(in einer Zeile)
  • ls dir/*wird erweitert ls dir/file1 dir/subdirund erweitert subdirden Inhalt
  • ls -d dir/*wird erweitert ls dir/file1 dir/subdir, aber aufgrund der -d subdirwird nicht erweitert und nur file1und subdirwerden aufgelistet (so erhalten Sie die gleiche Ausgabe wie im ersten Fall).