linux - 与 cp 命令和 -R 参数一起使用时 *.* 和 * 之间的区别

标签 linux shell command-line

我只是想知道有什么区别

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,其中包含文件

  1. 如果是其中一种情况,是否只将所有文件从 geom 和 alg 复制并放入 geom_src 中?那么源的dir结构会被忽略吗?

  2. geom 中的所有文件以及 alg + alg 本身的所有文件都将被复制并保留子目录结构?

  3. 与 2 相同?

  4. 与 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/

相关文章:

c - 为什么这个程序打印 "forked!"4 次?

Linux 中的 Java Tesseract 错误导致 JVM 中出现 SIGSEGV

shell - 'find -exec' 或 'find | xargs -0' 哪个更快?

linux - 命令行视频编辑工具

linux命令根据模式将大型csv文件随机排列以交替行

delphi - 如何 ShellExecute 一个程序,然后发送它的命令行文本

linux - 用 bash 解析 .env 文件

php - 在 postgres 用户上设置密码是否意味着即使将 pg_hba.conf 设置为信任也需要密码?

bash - 替换除字母以外的所有内容

linux - 无法在 shell 脚本中使用变量进行比较