我只是想知道有什么区别
cp -R $rootpath/vgcore/core/src/geom/*.* $destpath/geom_src
,
cp -R $rootpath/vgcore/core/src/geom/* $destpath/geom_src
,
cp -R $rootpath/vgcore/core/src/geom $destpath/geom_src
和
cp -R $rootpath/vgcore/core/src/geom/ $destpath/geom_src
假设我们在 geom 中有一个子目录,比如 alg,其中包含文件
如果是其中一种情况,是否只将所有文件从 geom 和 alg 复制并放入 geom_src 中?那么源的dir结构会被忽略吗?
geom 中的所有文件以及 alg + alg 本身的所有文件都将被复制并保留子目录结构?
与 2 相同?
与 2 和 3 相同吗?
抱歉,没有方便的 Linux 测试机器来亲自测试。
谢谢。
最佳答案
cp -R $rootpath/vgcore/core/src/geom/. $destpath/geom_src
在 .../src/geom 中找到的每个名称中带有点的目录条目(文件和子目录)都将被复制到 .../geom_src
请注意,隐藏条目(名称以点开头的条目)不会被复制,因为它们不可见。
cp -R $rootpath/vgcore/core/src/geom/* $destpath/geom_src
此命令与上面相同,但范围更广 - 任何文件(或“目录条目”)都将被复制,而不仅仅是名称中包含点的文件。
cp -R $rootpath/vgcore/core/src/geom $destpath/geom_src
cp -R $rootpath/vgcore/core/src/geom/ $destpath/geom_src
与之前相同,但有所不同。他们将单个对象(目录条目)复制到目的地; single,因为没有指定通配符。以您的具体示例为例,最后两个命令将复制 .../geom/内的所有内容,或多或少与以前相同,但它们将再复制一次,即目录“geom”本身!/geom/内的所有文件仍将位于目标中新创建的“geom”下(假设它尚不存在)。
如果你问这个,那么也许你来自dos或windows。在 dos/winslow 下,在执行命令之前没有扩展 - 由命令本身解释通配符。相反,在 unix 下,参数会预先扩展:如果您碰巧在 .../src/geom/中有 200 个项目,则调用的程序(例如 cp)将接收 200 个参数。
另一个 dos/unix 区别是你提到的点(* 与 .)。 DOS 使用的文件名由两部分组成,中间用点(有时不可见)分隔。 Unix 则不然,点在文件名中没有特殊含义,除了以点开头的名称通常不会被 shell“看到”(并因此被认为)这一事实之外。
关于linux - 与 cp 命令和 -R 参数一起使用时 *.* 和 * 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53459827/