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

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

我的意思是,如果我有两个目录,A和B,我想把B移到A上,我想把不在A中但是在B中的文件和目录简单地复制到A中,同样的文件将A中的名称更新为B中的副本,并将A中的同名文件夹更新为来自B的新内容,但否则保留现有内容

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

顺便说一句,这是我的理解,这是当你提取一个tar归档的旧版本的档案时会发生什么。 这是真的?

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

如果一切看起来不错,删除-n标志使其实际上做的工作。 如果你不想让它变得如此琐碎,请删除-v标志。

编辑:确切地说,这使得b拥有了一切,再加上之前所有的东西。

你用tar在正确的轨道上。 这个命令会做你想要的:

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

我也见过用于此目的的cpiorsync

下面是一个使用tar运行的例子:

 /tmp $ tree AB 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 AB 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 $ 

希望有所帮助!

这听起来像你想同步太多的目录。

它需要更多的设置,但如果你想经常这样做,你可能需要一致看待。 这是一篇描述设置的文章 。