将目录结构复制到另一个目录之上

将目录结构复制到另一个目录之上

我想将一个目录及其所有内容移动到另一个目录之上。

我的意思是,如果我有两个目录 A 和 B,我想将 B 移动到 A,那么我希望将不在 A 中但在 B 中的文件和目录简单地复制到 A,将 A 中同名的文件更新为 B 中的副本,将 A 中同名的文件夹更新为来自 B 的新内容,但保留现有内容

有没有办法在 bash 中轻松地做到这一点?

顺便说一句,据我所知,当您提取 tar 存档覆盖该存档的旧版本时,就会发生这种情况。这是真的吗?

答案1

rsync -a -v -n /path/to/a/ /path/to/b/

如果一切正常,删除 -n 标志使其真正发挥作用。如果您不想让它太啰嗦,删除 -v 标志。

编辑:准确地说,这使得 b 拥有 a 拥有的一切,并且保留 b 之前拥有的一切。

答案2

你的方法是正确的tar。这个命令会执行你想要的操作:

$ cd /path/to/A
$ tar -cf - * | tar -C /path/to/B -xf -

我也曾见过cpiorsync使用过此目的。

以下是运行的示例tar

/tmp $ tree A B
A
|-- one
|   `-- two
|       |-- four
|       `-- three
`-- uno
    `-- hello
B
|-- dos
|   |-- hi
|   `-- tres
`-- one
    `-- two
        `-- three

7 directories, 5 files
/tmp $ md5sum A/one/two/three B/one/two/three 
764efa883dda1e11db47671c4a3bbd9e  A/one/two/three
d41d8cd98f00b204e9800998ecf8427e  B/one/two/three
/tmp $ (cd A; tar -cf - * | tar -C ../B -xf -)
/tmp $ tree A B
A
|-- one
|   `-- two
|       |-- four
|       `-- three
`-- uno
    `-- hello
B
|-- dos
|   |-- hi
|   `-- tres
|-- one
|   `-- two
|       |-- four
|       `-- three
`-- uno
    `-- hello

8 directories, 7 files
/tmp $ md5sum A/one/two/three B/one/two/three 
764efa883dda1e11db47671c4a3bbd9e  A/one/two/three
764efa883dda1e11db47671c4a3bbd9e  B/one/two/three
/tmp $ 

希望有帮助!

答案3

听起来您好像想要同步目录。

它确实需要更多设置,但如果你想经常这样做,你可能需要看看齐奏。这是一个文章描述设置。

相关内容