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

时间:2017-05-30 12:32:29

标签: bash rsync

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

  1. DIRECTORY_1我有file1,file2,file3和folder1
  2. DIRECTORY_2我有file4,file5,file6和folder2

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

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

3 个答案:

答案 0 :(得分:3)

$ 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会是下一个吗?

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

使用统一,它是一个真实的文件夹同步器(例如Dropbox或Mega做到了)。

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

使用brew安装Mac:

 brew install unison

我使用了以下命令:

unison -auto /path/folder1 /path/folder2

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