📌  相关文章
📜  rsync 仅特定文件但保留文件夹 linux - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:19:51.644000             🧑  作者: Mango

使用rsync仅同步特定文件但保留文件夹

使用rsync命令可以非常方便地在两个机器之间同步文件和文件夹。我们可以使用一些选项来过滤不需要同步的文件和文件夹。在下面的例子中,我们将介绍如何使用rsync只同步特定文件但保留文件夹。

  1. 使用rsync同步整个文件夹

首先,让我们看一下如何使用rsync同步整个文件夹。假设我们有一个包含以下文件和文件夹的源文件夹:

/source/
├── folder1
│   ├── file1.txt
├── folder2
│   ├── file2.txt
└── file3.txt

我们想要将源文件夹同步到目标文件夹 /destination/ 中。我们可以使用以下命令:

$ rsync -avzh /source/ /destination/

该命令指定了以下选项:

  • -a:将所有内容以递归方式同步,保留所有文件属性和权限。
  • -v:输出详细进度和日志信息。
  • -z:传输时进行压缩以提高效率。
  • -h:以人类可读的格式显示输出。
  1. 过滤不需要同步的文件

现在,假设我们只想同步源文件夹中的某些文件,例如只同步 .txt 文件和文件夹 folder1。我们可以使用 --include 和 --exclude 选项来进行过滤。

$ rsync -avzh --include '*/' --include '*.txt' --exclude '*' /source/ /destination/

该命令指定了以下选项:

  • --include '*/':包含所有文件夹(可以确保目标文件夹中有完整的文件夹结构)。
  • --include '*.txt':只包含扩展名为 .txt 文件。
  • --exclude '*':排除所有其他文件和文件夹。
  1. 仅同步文件的子集但保留文件夹结构

如果我们只想同步某个文件夹中的某些文件,但仍要保留文件夹结构,我们可以使用以下命令:

$ 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可以很容易地同步特定文件但保留文件夹结构。