如何在 Unix 上使用终端窗口将目录结构 dir1 复制到 dir2(包含所有子目录)?
答案1
cp -rf /source/path/ /destination/path/
-r
= 递归,复制所有子目录
-f
= 强制,如果无法打开现有目标文件,则删除它并重试
笔记使用该标志时应小心谨慎,-f
因为它会强制覆盖您复制的任何内容。感谢@Nifle 的建议。
如果需要,您可能需要使用 * 通配符来复制目录中的所有文件。
答案2
虽然cp -R
答案是正确的(顺便说一下,BSD 上的标志的大小写必须大写,两者都支持 Linux),但一个古老的咒语,涉及焦油:
$ tar cf - . | (cd DIR; tar xf - )
你为什么要这么做?因为 tar 对链接既艰难又具有象征意义。
您是否希望复制以将现有符号链接替换为具有相同文本的符号链接?或者使用指向相同目标的链接(调整相对路径以进行补偿)?或者使用目标的按位副本?
如果原始文件中的两个文件是硬链接的,那么新结构是否应该有两个数据副本还是只有一个?
决策,决策。Tar 有合理的默认值,但允许您对此进行非常具体的设置。
答案3
我喜欢
cp -axv source dest
Rsync 是另一个很好的工具
rsync -va source dest