linux - 如何强制 'cp' 覆盖目录而不是在里面创建另一个目录?

我正在尝试编写一个覆盖现有目录的 Bash 脚本。我有一个目录 foo/ ,我试图用它覆盖 bar/ 。但是当我这样做时:

cp -Rf foo/ bar/

一个新的 bar/foo/ 目录被创建。我不想要那个。 foo/中有两个文件; abbar/ 中也有同名的文件。我希望 foo/afoo/b 替换 bar/abar/b

最佳答案

您可以使用 cp 中的 -T 选项来执行此操作。
请参阅 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 时,您可以看到明显的区别。
当你只使用 -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

这应该可以解决您的问题。

关于linux - 如何强制 'cp' 覆盖目录而不是在里面创建另一个目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23698183/

相关文章:

python - 重命名 Pandas 中的特定列

python - tight_layout() 不考虑数字字幕

linux - 如何粘贴到终端?

linux - 在 LINUX 中确定 .a 库/存档是 32 位还是 64 位?

python - 通过 'ElementTree' 在 Python 中使用命名空间解析 XML

python - Python 有包/模块管理系统吗?

linux - 解压 tar.gz 文件

python - 将一对列表/元组解压缩成两个列表/元组

python - 是否可以将另一个版本的 Python 安装到 Virtualenv?

linux - 多个 GZip 文件的快速连接