在 Unix 上复制目录

Din*_*mar 82 unix terminal bash

如何使用终端窗口在 Unix 上将目录结构 dir1 复制到 dir2(包括所有子目录)?

qro*_*rts 118

cp -rf /source/path/ /destination/path/
Run Code Online (Sandbox Code Playgroud)

-r =递归,复制所有子目录

-f = force,如果无法打开现有的目标文件,请将其删除并重试

注意使用该-f标志时应小心,因为它会强制覆盖您复制到的任何内容。感谢@Nifle 的建议。

如果需要,您可能希望使用 * 通配符复制目录中的所有文件。

  • 我不同意你应该使用 `f` 标志。`-f 如果无法打开现有目标文件,请将其删除并重试` (11认同)

dmc*_*ten 11

虽然cp -R答案是正确的(顺便说一句,BSD 上的标志的情况必须是大写的,两者都在 linux 上支持),但有一个涉及 tar 的旧咒语

$ tar cf - . | (cd DIR; tar xf - )
Run Code Online (Sandbox Code Playgroud)

你为什么要这样做?因为 tar对硬链接和符号链接有相当复杂的理解。

您是否希望复制以使用具有相同文本的符号链接替换现有符号链接?或者链接到同一目标(调整相对路径以进行补偿)?还是使用目标的按位副本?

如果原始文件中的两个文件是硬链接的,那么新结构应该有两个数据副本还是只有一个?

决定,决定。Tar 具有合理的默认值,但可以让您非常具体地了解它。


小智 9

我喜欢

cp -axv source dest
Run Code Online (Sandbox Code Playgroud)

Rsync 是另一个很好的工具

rsync -va source dest
Run Code Online (Sandbox Code Playgroud)