Answers:
您可以使用中的-T选项来执行此操作cp。
参见手册页cp。
-T, --no-target-directory
treat DEST as a normal file
因此,按照您的示例,以下是文件结构。
$ tree test
test
|-- bar
| |-- a
| `-- b
`-- foo
|-- a
`-- b
2 directories, 4 files
当您使用-vVerbose 时,可以看到明显的区别。
当您使用just -R选项时。
$ cp -Rv foo/ bar/
`foo/' -> `bar/foo'
`foo/b' -> `bar/foo/b'
`foo/a' -> `bar/foo/a'
$ tree
|-- bar
| |-- a
| |-- b
| `-- foo
| |-- a
| `-- b
`-- foo
|-- a
`-- b
3 directories, 6 files
使用该选项时,-T它将覆盖内容,将目标视为普通文件而不是目录。
$ cp -TRv foo/ bar/
`foo/b' -> `bar/b'
`foo/a' -> `bar/a'
$ tree
|-- bar
| |-- a
| `-- b
`-- foo
|-- a
`-- b
2 directories, 4 files
这应该可以解决您的问题。
bar/)中而不是源(foo/)中的文件。到位,所以这不是大多数人认为完全覆盖目录的方式。即。如果bar/baz已经存在,它将在以后仍然存在...
rm -rf bar/* && cp -TRv foo/ bar/
分两步完成。
rm -r bar/
cp -r foo/ bar/
bar内容与相同foo,而不是来自的项目foo加上可能已经存在的其他项目的组合bar。下面的@Saurabh Meshram极力支持的答案存在此问题。
rm -rf bar/; cp -r foo/ !$
foo并且bar……其中某些文件bar不是foo您不想删除的。这不应该是一个现实的答案,恕我直言
如果要确保bar/最终结果与相同foo/,请rsync改用:
rsync -a --delete foo/ bar/
如果仅有几处更改,则此操作的执行速度将比删除并重新复制整个目录快得多。
-a是“存档模式”,可将文件如实复制foo/到bar/--delete删除多余的文件不是foo/从bar/为好,以确保bar/各上调相同-vh详细信息并易于阅读foo是必需的,否则rsync将复制foo/到bar/foo/而不是覆盖bar/自身。
foo/到的内容bar/,我们使用斜线上都它的混乱,因为它会如预期与斜线不工作。没有,虽然,rsync的鬼祟总是解释的目标路径,就好像它有一个斜杠,即使它崇没有斜线的来源路径。因此,我们需要的源路径上的斜线,使其目标路径上匹配自动添加斜线,如果我们想将复制内容的foo/进入bar/,而不是目录foo/本身落地成bar/的bar/foo。)rsync 是非常强大且有用的,如果您好奇地看一下它还能做什么(例如通过ssh复制)。
cp -T选项更胜一筹,因为它也适用于macosx👍–
使用此cp命令:
cp -Rf foo/* bar/
cp命令应该从源中删除文件?
以下命令确保副本中包含点文件(隐藏文件):
$ cp -Rf foo/. bar
.表示目录中的所有文件。因此,自然会包含隐藏文件。
与@Jonathan Wheeler非常相似:
如果您不想记住但不想重写bar:
rm -r bar/
cp -r foo/ !$
!$ 显示上一个命令的最后一个参数。