我只想了解
有什么区别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?那么源的目录结构会被忽略吗?
geom中的所有文件以及alg + alg本身中的所有文件都将通过保留子目录结构进行复制?
等于2吗?
与2和3一样吗?
抱歉,没有方便的Linux测试机器可以自己进行测试。
谢谢。
答案 0 :(得分:0)
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
等效,与以前不同。他们将单个对象(目录条目)复制到目标位置。单,因为未指定通配符。以您的特定示例为例,这最后两个命令将复制... / geom /内的所有内容,与以前大致相同,但是它们将复制一次以上的内容,即目录“ geom”本身!并且/ geom /中的所有文件仍将位于目标中新创建的“ geom”下(假定它尚不存在)。
如果您问这个问题,那么也许您来自dos或Windows。在dos / winslow下,在执行命令之前不会进行扩展-解释通配符的是命令本身。相反,在unix下,参数会事先扩展:如果您在... / src / geom /中碰巧有200个项目,则被调用的程序(例如cp)将接收200个参数。
dos / unix的另一个区别是您提到的点(*与。)。 DOS使用由两部分组成的文件名,两部分之间用一个点(有时不可见)分隔。 Unix并不这样,除了文件名通常不被外壳“看到”(并因此考虑)以外,文件名中的点没有特殊含义。
答案 1 :(得分:-1)
在bash中键入任何内容时,将在执行之前对您编写的内容进行解析。
shell expansion(在此情况下为文件名扩展)是预执行任务之一。
现在,让我们检查一下您的代码。
基本是cp -R what where
,它是*复制从what
开始的所有内容,并遵循符号链接,然后将其放入where
*。
您的示例的不同之处在于what
。
示例2、3和4最终将产生相同的效果:复制所有内容。
第二个任务将其工作分解为多个任务;更具体地说,依次$rootpath/vgcore/core/src/geom
中的每个文件夹一个;
最终,您将复制所有文件夹,如第三和第四命令一样。
顺便说一句,第一个示例是要求*.*
,它是其中至少包含一个点的所有内容。
这意味着每个名称中没有点的文件夹都将被忽略。