目录 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 将一个或多个源文件或目录复制到目标目录。如果目标目录不存在,则会在复制第一个源之前创建该目录。如果目标目录已存在,则源目录将与目标的先前内容合并。