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
当您使用-v
Verbose 时,可以看到明显的区别。
当您使用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/ !$
!$
显示上一个命令的最后一个参数。