如何将一个目录的所有内容复制到另一个目录中?
例如:
$ 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)
Ric*_*haw 25
两个目录 a 和 b。
两者都有文件。
您位于包含 a 和 b 的目录中。
cp -r ./a b
Run Code Online (Sandbox Code Playgroud)
-r
= 递归。
小智 19
请记住,默认情况下,如果第二个目录存在,cp
则将第一个目录复制到第二个目录中。
例如cp -r a b
将目录 复制a
到b
. 如果b
不存在,它将使用a
.
如果你想复制内容的a
进入b
(例如拷贝整个文件系统到安装点时)使用:
cp -r a/. b
Run Code Online (Sandbox Code Playgroud)
如上一个答案。
还请注意,-a
在其他一些答案中使用的-dr --preserve=all
与并将保留时间戳、上下文和扩展属性相同。
除非您认真地重新配置了您的 shell,否则通配符模式 '*' 与 '.' 不匹配。或“..”,因为您可以仅使用 echo * 进行验证。它所做的是省略名称以“.”开头的文件,因此您的方法将错过所有隐藏文件。您可以使用 shell 选项来调整其中的一些行为,例如 bash 中的 dotglob 选项,但它不会是您正在寻找的可移植和健壮的选项。
如果您需要多次执行此操作,我建议您使用精心设计的源和目标规范来研究 rsync 或 unison(取决于特定需求)。
另一种选择是将源目录放在一个 tarball 中,然后将它解压到现有的目标目录中。
归档时间: |
|
查看次数: |
95678 次 |
最近记录: |