在 OS X 中使用“mv”或“ditto”合并文件夹

8 mv macos

习惯了 Windows 的方式我才发现 OS X 没有合并功能 - 移动意味着替换文件夹。虽然这确实有道理,但我想念合并!


我有两个 Wordpress 目录,1 个包含默认源,2 个包含带有插件自定义主题等的工作版本。

我想看看这两者之间的区别,所以我把它放在 SVN 上。文件夹 1 已经存在,现在理论上我应该简单地将 2 的内容与 1 合并,方法是用 2 的内容替换所有内容,但不影响隐藏的 SVN 文件。

不幸的是,OS X 在移动时替换了文件夹,因此我的 SVN 客户端变得疯狂并且不再理解文件夹结构。

所以,我相信我的选择是mvditto,但是在我的情况下您会使用哪个以及如何使用?

sudo mv wordpress /Documents/svn/wwwholiday/trunk/wordpress
Run Code Online (Sandbox Code Playgroud)

我想mv覆盖它找到的所有内容,但不要管文件夹 1 中已有的内容,并且文件夹 2 中没有重复内容。

slh*_*hck 15

以一种方式合并文件夹的最简单方法,例如

合并文件夹 1 → 文件夹 2 中的所有内容

将使用rsync.

rsync -avh folder1/* folder2/
Run Code Online (Sandbox Code Playgroud)

这会:

  • 将仅存在于文件夹 1 及其子目录中的所有文件移动到文件夹 2
  • 如果文件夹 2 已经存在,则不要覆盖文件夹 2 中的任何内容
  • 覆盖已更改的文件,除非您添加该--ignore-existing选项
  • 不要从文件夹 2 中删除任何内容,除非您添加该--delete选项

随意调整它以适应您的情况(我猜在哪里folder1folder2在哪里)。

您可以尝试通过调用以下命令来查看命令的作用:

rsync -avh --dry-run folder1/ folder2/
Run Code Online (Sandbox Code Playgroud)

dry-run开关会显示它做什么。


不要忘记反斜杠有特殊的含义,因此folder2/目的地与folder2. 检查手册页以rsync了解用法和更多选项。

还推荐的是-P(根据--help, same as --partial --progress),它添加show progress during transferkeep partially transferred files(如果有失败,这对于重试很有用)。