Welche Bedeutung hat der Punkt in Bash-Befehlen und wie unterscheidet er sich von einem Sternchen?

11

Ich versuche zu verstehen, welche Bedeutung der Punkt in Bash hat und wie er sich von einem Stern unterscheidet. Kann jemand bitte näher darauf eingehen? Was ist zum Beispiel der Unterschied zwischen cp -ar /foo/. /foo2/undcp -pr /foo/* /foo2/

Mike B.
quelle

Antworten:

12

Der Punkt ( .) ist nur das .Verzeichnis in einem Verzeichnis, das mit dem Verzeichnis selbst identisch ist (es ls -la /foowird Ihnen angezeigt). Wenn Sie also an eine foo/.andere Stelle kopieren , kopieren Sie effektiv den gesamten folgenden Baum, fooohne sich fooselbst zu kopieren (Sie kopieren ihn in foo2/.den gleichen wie foo2).

/foo/*wird von der Shell in der Liste der nicht-versteckten Dateien und Verzeichnisse in erweitert /foo, so dass es die gleiche Verzeichnisstruktur unter kopieren würde /fooin /foo2so gut, mit Ausnahme der dotfiles / dotdirs. Effektiv cpwird (möglicherweise) viele Argumente erhalten. Wenn die Liste zu groß ist, kann die Ausführung sogar cpfehlschlagen.

Stéphane Chazelas
quelle
Entschuldigung, aber ich werde verwirrt. Das Sternchen macht den Befehl also von Natur aus rekursiv? Mit anderen Worten, cp -r /foo/*macht das Gleiche wie cp /foo/* ?
Mike B
5
@MikeB, nein, die Shell erweitert nur die Liste der Dateien im Verzeichnis / foo. Es ändert nichts am Verhalten von cp. Verwenden Sie set -xoder, um echo cp -pr /foo/* /foo2zu sehen, was los ist. Es ist wichtig zu erkennen, dass es die Shell ist, die die Platzhalter erweitert. cpsieht den Stern nicht.
Stéphane Chazelas
Was ist damit? chmod 755 -R. versus chmod 755 -R *
Wayofthefuture