如何同步Bash中的两个文件夹?
How to synchronize two folders in Bash?
我正在写一个简短的脚本。一项功能是同步两个文件夹。现在我有两个变量,它们的目录指向两个不同的文件夹:DIRECTORY_1
和 DIRECTORY_2
。在这两个文件夹中是文件和其他文件夹。我需要同步这些文件夹以在两个文件夹中包含所有文件。例如:
- 在
DIRECTORY_1
我有文件 1、文件 2、文件 3 和文件夹 1
在 DIRECTORY_2
我有 file4、file5、file6 和 folder2
我需要评论,之后我将在两个目录 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 个文件具有相同的名称,它将替换为最新版本。
我正在写一个简短的脚本。一项功能是同步两个文件夹。现在我有两个变量,它们的目录指向两个不同的文件夹:DIRECTORY_1
和 DIRECTORY_2
。在这两个文件夹中是文件和其他文件夹。我需要同步这些文件夹以在两个文件夹中包含所有文件。例如:
- 在
DIRECTORY_1
我有文件 1、文件 2、文件 3 和文件夹 1 在
DIRECTORY_2
我有 file4、file5、file6 和 folder2我需要评论,之后我将在两个目录 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 个文件具有相同的名称,它将替换为最新版本。