📅  最后修改于: 2023-12-03 15:19:51.644000             🧑  作者: Mango
使用rsync命令可以非常方便地在两个机器之间同步文件和文件夹。我们可以使用一些选项来过滤不需要同步的文件和文件夹。在下面的例子中,我们将介绍如何使用rsync只同步特定文件但保留文件夹。
首先,让我们看一下如何使用rsync同步整个文件夹。假设我们有一个包含以下文件和文件夹的源文件夹:
/source/
├── folder1
│ ├── file1.txt
├── folder2
│ ├── file2.txt
└── file3.txt
我们想要将源文件夹同步到目标文件夹 /destination/ 中。我们可以使用以下命令:
$ rsync -avzh /source/ /destination/
该命令指定了以下选项:
-a
:将所有内容以递归方式同步,保留所有文件属性和权限。-v
:输出详细进度和日志信息。-z
:传输时进行压缩以提高效率。-h
:以人类可读的格式显示输出。现在,假设我们只想同步源文件夹中的某些文件,例如只同步 .txt 文件和文件夹 folder1。我们可以使用 --include 和 --exclude 选项来进行过滤。
$ rsync -avzh --include '*/' --include '*.txt' --exclude '*' /source/ /destination/
该命令指定了以下选项:
--include '*/'
:包含所有文件夹(可以确保目标文件夹中有完整的文件夹结构)。--include '*.txt'
:只包含扩展名为 .txt 文件。--exclude '*'
:排除所有其他文件和文件夹。如果我们只想同步某个文件夹中的某些文件,但仍要保留文件夹结构,我们可以使用以下命令:
$ rsync -avzh --include '*/' --include 'folder1/**' --include 'folder1/*.txt' --exclude '*' /source/ /destination/
该命令指定了以下选项:
--include '*/'
:包含所有文件夹。--include 'folder1/**'
:包含文件夹 folder1 及其所有子文件夹。--include 'folder1/*.txt'
:包含文件夹 folder1 中扩展名为 .txt 的文件。--exclude '*'
:排除所有其他文件和文件夹。现在,我们只同步了源文件夹中的以下内容:
/source/
├── folder1
│ ├── file1.txt
└── file3.txt
并创建了以下目标文件夹中的结构:
/destination/
├── folder1
│ └── file1.txt
└── file3.txt
这样,使用rsync可以很容易地同步特定文件但保留文件夹结构。