bash 命令中点的意义是什么,它与星号有什么不同?

Mik*_*e B 11 shell directory filenames wildcards

我试图了解 bash 中点的重要性以及它与星号的区别。有人可以详细说明吗?例如,有什么之间的区别cp -ar /foo/. /foo2/cp -pr /foo/* /foo2/

Sté*_*las 12

点 ( .) 只是.目录中的目录,它与目录本身相同(ls -la /foo将显示给您)。因此,如果您foo/.在其他地方复制,则可以有效地复制下面的所有树,foo而不会复制foo自身(您将其复制到foo2/.与 相同的位置foo2)。

/foo/*由 shell 扩展为 中的非隐藏文件和目录的列表/foo,因此除了 dotfiles/dotdirs 之外,它还会将相同的目录结构复制/foo/foo2其中。有效地,cp将收到(可能)许多参数。如果列表太大,甚至可能导致执行cp失败。

  • @MikeB,不,shell 只扩展 /foo 目录中的文件列表。它不会改变 cp 的行为。使用 `set -x` 或 `echo cp -pr /foo/* /foo2` 来查看发生了什么。重要的是要意识到扩展通配符的是外壳。`cp` 没有看到星星。 (5认同)