首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在递归操作中使用星号通配符有什么意义?

在递归操作中使用星号通配符有什么意义?
EN

Unix & Linux用户
提问于 2022-09-01 15:00:53
回答 1查看 148关注 0票数 1

我正在读LPIC-1 PDF。上面写着:

通常,要复制我们使用的目录的所有内容: cp -r SOURCE_PATH/* DEST_PATH

但我不明白为什么没有*的-r选项本身是不够的?应该是对的?

谢谢。

编辑:我试过了,结果很有趣。首先,如果目标不存在,*源中的通配符会产生错误,因为没有目标目录。没有* cp复制所有隐藏文件,包括隐藏在顶部和子目录中的文件。

另一方面,如果目标存在,并且我们在源中使用*通配符,cp会复制除隐藏文件以外的顶部所有文件,但子目录隐藏文件包括在内。

代码语言:javascript
复制
[rocky@rocky ~]$ tree -a test1
test1
├── .hiddentestfile1
├── test2
│   ├── .hiddentestfile2
│   └── testfile2
└── testfile1

1 directory, 4 files
[rocky@rocky ~]$ cp -r test1/* newdest
cp: target 'newdest' is not a directory
[rocky@rocky ~]$ cp -r test1/ newdest
[rocky@rocky ~]$ tree -a newdest
newdest
├── .hiddentestfile1
├── test2
│   ├── .hiddentestfile2
│   └── testfile2
└── testfile1

1 directory, 4 files
[rocky@rocky ~]$ rm -r newdest
[rocky@rocky ~]$ mkdir newdest
[rocky@rocky ~]$ cp -r test1/* newdest
[rocky@rocky ~]$ tree -a newdest
newdest
├── test2
│   ├── .hiddentestfile2
│   └── testfile2
└── testfile1

1 directory, 3 files
EN

回答 1

Unix & Linux用户

发布于 2022-09-01 16:53:21

cp -r源路径/* DEST_PATH

递归地将每个(非隐藏的)文件或目录及其内容复制到DEST_PATH (假设这是指向目录的目录或符号链接)。

然后,如果SOURCE_PATH包含例如filedir.git,那么您将得到DEST_PATH/fileDEST_PATH/dir

请注意,如果DEST_PATH不存在或不是目录,并且SOURCE_PATH只包含一个非隐藏的文件或目录(例如SOURCE_PATH/file),那么它将变成cp -r SOURCE_PATH/file DEST_PATH (复制到而不是复制到),这意味着DEST_PATH将作为file的副本创建(或覆盖)。在命令中将/附加到DEST_PATH确保不会发生这种情况(确保复制或失败,而不是目录;还请参阅GNU cp-t选项)。

通过以下方式:

cp -r SOURCE_PATH DEST_PATH

您要将SOURCE_PATH目录(及其所有内容(包括隐藏文件)递归地复制到DEST_PATH中(假设它再次存在并且是一个目录),因此您将得到DEST_PATH/SOURCE_PATHDEST_PATH/SOURCE_PATH/{.git,dir,file}。所以它给出了一个完全不同的结果。

在这里,要将SOURCE_PATH的所有内容(包括隐藏文件)复制到DEST_PATH中,而不是SOURCE_PATH本身,您最好使用:

代码语言:javascript
复制
cp -r SOURCE_PATH/. DEST_PATH

除了包含隐藏文件(假设为zsh,您也可以使用cp -r SOURCE_PATH/*(D) DEST_PATH/)之外,如果SOURCE_PATH有太多的非隐藏文件,它的优点还包括不会出现太多的参数错误,如果SOURCE_PATH是空的,则不会报告错误。而且,如果DEST_PATH不存在,它将作为SOURCE_PATH的副本创建。

使用cp的GNU实现,您可以对以下内容进行同样的操作:

代码语言:javascript
复制
cp -rT SOURCE_PATH DEST_PATH

(-T,又名--no-target-directory强制复制-而不是拷贝--即使目标是目录)。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/715774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档