如何同步Bash中的两个文件夹?

How to synchronize two folders in Bash?

我正在写一个简短的脚本。一项功能是同步两个文件夹。现在我有两个变量,它们的目录指向两个不同的文件夹:DIRECTORY_1DIRECTORY_2。在这两个文件夹中是文件和其他文件夹。我需要同步这些文件夹以在两个文件夹中包含所有文件。例如:

  1. DIRECTORY_1 我有文件 1、文件 2、文件 3 和文件夹 1
  2. DIRECTORY_2 我有 file4、file5、file6 和 folder2

  3. 我需要评论,之后我将在两个目录 files1-6 和 folders1-2 中都有。

我正在尝试 rsync 命令,但它无法正常工作。

$ mkdir dir1
$ mkdir dir2
$ touch dir1/file1 dir1/file2 dir1/file3
$ mkdir dir1/folder1
$ touch dir2/file4 dir2/file5 dir2/file6
$ mkdir dir2/folder2
$ tree
.
|-- dir1
|   |-- file1
|   |-- file2
|   |-- file3
|   `-- folder1
`-- dir2
    |-- file4
    |-- file5
    |-- file6
    `-- folder2
$ rsync -a dir1/ dir2
$ tree
.
|-- dir1
|   |-- file1
|   |-- file2
|   |-- file3
|   `-- folder1
`-- dir2
    |-- file1
    |-- file2
    |-- file3
    |-- file4
    |-- file5
    |-- file6
    |-- folder1
    `-- folder2

我想 rsync -d dir2/ dir1 会是下一个?

可能不是最有效的,但这样做可以解决问题:

comm <(ls DIR1) <(ls DIR2) -23 | while read f; do cp -r DIR2/$f DIR1; done
comm <(ls DIR1) <(ls DIR2) -13 | while read f; do cp -r DIR1/$f DIR2; done

Use unison,它是一个真正的文件夹同步器(例如 Dropbox 或 Mega 所做的)。

https://www.cis.upenn.edu/~bcpierce/unison/

Mac 使用 brew 安装:

 brew install unison

我使用了这个命令:

unison -auto /path/folder1 /path/folder2

此外,对我来说最重要的是,如果 2 个文件具有相同的名称,它将替换为最新版本。