如何在bash中递归复制所有目录和文件?

217

我有一个脚本:

find ./SourceFolder/ -maxdepth 4 -exec cp -R '{}' ./DestFolder/ \;

SourceDir 包含子文件夹。

问题在于 DestFolder 不仅包括整个树,还包括上一级所有级别和文件。

如何修复?


抱歉,忘记添加 -name "*.txt"。 - user710818
你应该通过编辑你的问题添加缺失的信息。 - SherylHohman
4个回答

416
cp -r ./SourceFolder ./DestFolder

11
为了澄清,大写的-R选项将再次复制根目录;小写的-r选项保持根路径不变。 - AnneTheAgile
10
@AnneTheAgile - 根据我的测试和手册,-r 和 -R 没有区别。 - aaaaaa
@aaaaaa,谢谢!你用的是哪个操作系统/版本?我后来发现,似乎在不同的操作系统中,bash命令可能会有微小的差别。 - AnneTheAgile
3
cp不是Bash命令,而是一个独立的可执行文件,因此它与系统相关。另一方面,真正的Bash命令在各种操作系统上都是相同的。 - lanzz
1
我不得不在我的源文件夹末尾添加一个斜杠。不确定为什么。我也使用了构建变量。cp -r“$CONFIG_PATH /”“$CODESIGNING_FOLDER_PATH” - Marty
5
这不会在DestFolder中创建 SourceFolder吗? - kontur

74

一个简单复制的代码。

cp -r ./SourceFolder ./DestFolder

复制成功的代码

cp -rv ./SourceFolder ./DestFolder

如果源包含任何只读文件,强制复制的代码

cp -rf ./SourceFolder ./DestFolder

了解详情请帮助

cp --help

13

也可以尝试这个命令:cp -r ./dist/* ./out;

该命令将把 dist/* 文件复制到 out 目录中;


1
@SherylHohman 这个不同是因为他在源文件夹的末尾加了一个/*。虽然我不知道这有什么影响。 - Lee Meador
1
该响应会将源文件夹的内容复制到目标(./out)文件夹中,而不是整个文件夹复制过去。 - user1275513

4
你可能会发现保持你的属性设置很方便。 cp -arf ./SourceFolder ./DestFolder

1
cp -arf ... 抛出错误 "cp: the -R and -r options may not be specified together." 将其更改为 cp -af ... 可以解决此问题。我不确定这是否是您的打字错误,或者 cp -arf ... 实际上对您有用,但我希望这可以帮助任何遇到相同错误的人。参考:https://dev59.com/ZY_ea4cB1Zd3GeqPMlPu#32695418 - GlyphCat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接