Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 与cp命令和-R参数一起使用时,**和*之间的差异_Linux_Shell_Command Line - Fatal编程技术网

Linux 与cp命令和-R参数一起使用时,**和*之间的差异

Linux 与cp命令和-R参数一起使用时,**和*之间的差异,linux,shell,command-line,Linux,Shell,Command Line,我只是想找出两者之间的区别 cp -R $rootpath/vgcore/core/src/geom/*.* $destpath/geom_src , , 及 假设我们在geom中有一个子目录,比如alg中有文件 在一种情况下,是否只从geom和alg复制所有文件并放入geom_src?那么源的dir结构将被忽略 geom中的所有文件以及alg+alg本身中的所有文件都将复制到SubDR结构上 和2一样 sames as 2和3 对不起,我手头没有测试Linux的机器来测试这个 谢谢。当您在b

我只是想找出两者之间的区别

cp -R $rootpath/vgcore/core/src/geom/*.* $destpath/geom_src
,

,

假设我们在geom中有一个子目录,比如alg中有文件

  • 在一种情况下,是否只从geom和alg复制所有文件并放入geom_src?那么源的dir结构将被忽略

  • geom中的所有文件以及alg+alg本身中的所有文件都将复制到SubDR结构上

  • 和2一样

  • sames as 2和3

  • 对不起,我手头没有测试Linux的机器来测试这个


    谢谢。

    当您在bash中键入任何内容时,您编写的内容将在执行之前进行解析

    预执行任务之一是(本例中为文件名扩展)

    现在,让我们检查一下您的代码

    基本的是
    cp-R what where
    这是*复制从
    what
    开始的所有内容,遵循符号链接并将其放入
    where
    *

    示例中的不同之处在于
    什么

    最后,示例2、3和4将做同样的事情:复制所有内容

    第二个将把工作分成多个任务;更具体地说,
    $rootpath/vgcore/core/src/geom
    中的每个文件夹依次对应一个; 最终,您将复制所有文件夹,如第三个和第四个命令

    顺便说一句,第一个例子是要求
    *.
    ,这是至少有一个点的东西

    这意味着每个名称中没有点的文件夹都将被忽略

    cp-R$rootpath/vgcore/core/src/geom/$destpath/geom_src

    在…/src/geom中找到的每个名称中带有点的目录条目(文件和子目录)将复制到…/geom\u 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/中的所有内容,或多或少与以前相同,但它们将再次复制一次项,即目录“geom”本身!并且/geom/中的所有文件仍将位于目标中新创建的“geom”下(假设它还不存在)

    如果你问这个问题,那么你可能来自dos或windows。在dos/winslow下,在执行命令之前没有任何扩展-解释通配符的是命令本身。相反,在unix下,参数是预先展开的:如果您碰巧在…/src/geom/中有200个项目,则被调用的程序(例如cp)将接收200个参数


    dos/unix的另一个区别是您提到的点(*vs.)。DOS使用由两部分组成的文件名,由一个(有时不可见)点分隔。Unix没有,点在文件名中没有特别的含义,除了以点开头的名称通常不会被shell“看到”(并因此被认为)之外。

    *
    将匹配所有内容,
    *.
    将匹配其中任何带有点的内容。最后两个在bahaviour中是相同的。请注意,
    $rootpath
    $destpath
    需要被引用,如
    “$rootpath”
    “$destpath”
    ”,以便在名称中包含空格、IFS中的字符以及可以作为全局计算的字符时正常工作(通常情况下,名称包含方括号)等会自动捕获此类错误。我投票将此问题作为离题问题结束,因为这不是一个编程问题,属于或或。非常感谢ingroxd的详细解释。感谢您的详细回答,linuxfan!
    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