在Unix上复制目录


Answers:


115
cp -rf /source/path/ /destination/path/

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

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

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

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


11
我不同意您应该使用该f标志。-f if an existing destination file cannot be opened, remove it and try again
Nifle 2010年

我个人总是使用-f标志。这不是一个好习惯,所以也许您是对的。
qroberts 2010年

如果您知道它的作用,并且知道自己在做什么,那没关系。但是在这种情况下,对于经验不足的用户,它可能不合适。
Nifle 2010年

@Nifle是的,我知道您在说什么。只是,如果他强行使用它,那么它起作用的机会要比他不这样做的机会要大。这一切都取决于您在做什么以及您了解它在做什么。
qroberts 2010年

如果您在答案中写了一个注释,说明-f如果在<dest>上复制<source>时该标志很有用(如覆盖<dest>中的内容),我将自己
投票

11

虽然cp -R答案是正确的(顺便说一句,BSD上标志的大小写必须为大写,Linux均支持),但其中有一个古老的咒语涉及tar

$ tar cf - . | (cd DIR; tar xf - )

你为什么要这么做?因为tar 对硬链接和符号链接都有相当全面的了解。

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

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

决定,决定。Tar具有合理的默认值,但是让您对此非常明确。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.