如何使用 Solaris(和 OSX)上的命令安全地合并两个目录?

如何使用 Solaris(和 OSX)上的命令安全地合并两个目录?

目录 A 和 B 有许多子目录,内容几乎相同。目录 B 可能有较新的文件和目录 A 没有的一些子目录。当目录 B 中的文件较新时,我希望这些文件覆盖 A 中的文件。当 B 包含 A 没有的子目录时,我希望将 B 目录合并到结果中。所以,我想我所说的只是我需要使用 Solaris 和 OSX 上可用的命令合并两个目录。我在 OSX 上本地工作,但需要在 Solaris 机器上执行相同的过程。我发现了几种技术。第一种方法是使用 tar:

光盘
tar -cvf 内容.tar *
cp 内容.tar../B
tar -uvf 内容.tar *
cp 内容.tar../
mv A A_备份;mv B B_备份
tar -xvf 内容.tar

(哇!看上去好乱啊)

另一种方法:

光盘B
焦油 cf - . |(cd ../A; 焦油 xvf -)

(将所有内容合并到 A 中)

我对这两种方法的疑问可能主要是信心问题。我不熟悉这些方法,无法真正看到发生了什么。我看不到哪些文件被覆盖了,也看不到 B 中存在哪些在 A 中不存在的文件夹或文件。

有没有更好的办法?

答案1

事实证明 rsync 可用于本地目录。

rsync -av B A

答案2

Mac OS X 具有ditto

ditto [-v] [-V] [-X] [<options>] src ... dst_directory

在其第一种形式中,ditto 将一个或多个源文件或目录复制到目标目录。如果目标目录不存在,则会在复制第一个源之前创建该目录。如果目标目录已存在,则源目录将与目标的先前内容合并。

相关内容