使用“cp”命令复制目录内容

36 linux backup

如何将一个目录的所有内容复制到另一个目录中?

例如:

$ cd /home/newuser
$ cp -a /backup/olduser/* .
Run Code Online (Sandbox Code Playgroud)

上面的问题是全局模式“*”与隐藏目录“.”匹配。和“..”,你最终会在“newuser”中得到一个目录“olduser”,以及内容。

你也可以做这样的事情:

$ rmdir /home/newuser
$ cp -a /backup/olduser /home/newuser
Run Code Online (Sandbox Code Playgroud)

但是如果 newuser 已经包含一些默认文件和目录怎么办?

仅使用基本的“cp”命令和 shell 将一个目录的内容移动到另一个目录的最简单、最正确、最容易记住而不是混乱的方法是什么?

小智 33

尝试:

cp -ra /backup/olduser/. /home/newuser
Run Code Online (Sandbox Code Playgroud)

  • 也适用于我,但不需要 `r` 选项。`a` 选项意味着 `r`。 (3认同)

Ric*_*haw 25

两个目录 a 和 b。

两者都有文件。

您位于包含 a 和 b 的目录中。

cp -r ./a b
Run Code Online (Sandbox Code Playgroud)

-r = 递归。

  • -a 参数与所有文件无关,它是存档的缩写,它将保留文件所有权、权限、访问时间等。 -a 参数(虽然非常有用)不是标准选项,并且一些 cp 实现不不提供。 (8认同)
  • 简单的方法:`cp -R /some/dir/* /another/dir` (2认同)

小智 19

请记住,默认情况下,如果第二个目录存在,cp则将第一个目录复制第二个目录中。

例如cp -r a b目录 复制ab. 如果b不存在,它将使用a.

如果你想复制内容a进入b(例如拷贝整个文件系统到安装点时)使用:

cp -r a/. b
Run Code Online (Sandbox Code Playgroud)

如上一个答案。

还请注意,-a在其他一些答案中使用的-dr --preserve=all与并将保留时间戳、上下文和扩展属性相同。


Pet*_*aut 6

除非您认真地重新配置了您的 shell,否则通配符模式 '*' 与 '.' 不匹配。或“..”,因为您可以仅使用 echo * 进行验证。它所做的是省略名称以“.”开头的文件,因此您的方法将错过所有隐藏文件。您可以使用 shell 选项来调整其中的一些行为,例如 bash 中的 dotglob 选项,但它不会是您正在寻找的可移植和健壮的选项。

如果您需要多次执行此操作,我建议您使用精心设计的源和目标规范来研究 rsync 或 unison(取决于特定需求)。

另一种选择是将源目录放在一个 tarball 中,然后将它解压到现有的目标目录中。


归档时间:

查看次数:

95678 次

最近记录:

5 年,10 月 前