> 文件与目录管理 > rsync-exclude

rsync-exclude: 同步文件时排除特定文件/目录

`rsync` 命令是一个强大的工具,用于在本地和远程系统之间高效地同步文件。特别是,通过 `--exclude` 和 `--exclude-from` 选项,您可以从同步目标中排除与特定文件、目录或模式匹配的项。本指南侧重于 `rsync` 的排除功能,在防止不必要的文件传输以及仅备份或复制特定数据时非常有用。

概述

`rsync` 的排除功能在复杂的文件同步场景中至关重要。通过从同步目标中排除特定的日志文件、临时文件、版本控制系统元数据(.git, .svn)等,可以缩短传输时间,节省目标空间,并避免复制不必要的数据。

主要特点

`rsync` 排除功能提供的核心特点。

  • **基于模式的排除**: 使用通配符(glob)模式,可以根据文件名或路径进行排除。
  • **基于文件列表的排除**: 可以将要排除的模式写入单独的文件进行管理。
  • **灵活的规则应用**: 可以与 `--include` 选项结合使用,定义复杂的包含/排除规则。
  • **性能优化**: 通过减少不必要的文件传输来提高同步速度。

主要选项

在 `rsync` 命令中用于排除文件和目录的核心选项。

指定排除规则

其他有用选项

生成的命令:

请尝试组合命令。

描述:

`rsync-exclude` 执行命令。

通过组合这些选项,您可以与 AI 一起虚拟地执行命令。

使用示例

使用 `rsync` 排除选项的实际示例。

排除特定文件扩展名

rsync -av --exclude='*.log' --exclude='*.tmp' /path/to/source/ /path/to/destination/

从源目录中排除 `.log` 和 `.tmp` 文件,然后同步到目标目录。

排除特定目录

rsync -av --exclude='node_modules/' --exclude='.git/' /path/to/source/ /path/to/destination/

从源目录中排除 `node_modules` 和 `.git` 目录,然后进行同步。

使用排除列表文件

rsync -av --exclude-from=exclude_list.txt /path/to/source/ /path/to/destination/

使用 `exclude_list.txt` 文件中定义的模式来排除同步目标。 **exclude_list.txt 内容示例:** ``` *.bak /temp_files/ logs/ ```

仅包含特定文件,排除其余所有文件

rsync -av --include='*.conf' --exclude='*' /path/to/source/ /path/to/destination/

默认排除所有文件,然后仅包含扩展名为 `.conf` 的文件进行同步。`--include` 和 `--exclude` 的顺序很重要。

同步到远程服务器时排除特定文件

rsync -avz --exclude='.DS_Store' --exclude='cache/' /path/to/local/user@remote_host:/path/to/remote/

将本地目录的内容同步到远程服务器,同时排除 `.DS_Store` 文件和 `cache/` 目录。

提示与注意事项

有效使用 `rsync` 排除选项并避免潜在问题的提示和注意事项。

理解模式匹配规则

排除模式遵循 `rsync` 的过滤规则。

  • **通配符**: `*` 匹配任何字符串,`?` 匹配单个字符。`**` 匹配跨越目录边界的字符。
  • **路径**: 以 `/` 开头的模式相对于源目录的根目录。以 `/` 结尾的模式仅匹配目录。
  • **相对路径**: 如果模式中没有 `/`,则在所有目录级别匹配。例如:`--exclude='temp'` 会排除 `/path/to/source/temp` 和 `/path/to/source/subdir/temp`。

选项顺序的重要性

`--include` 和 `--exclude` 选项按其在命令行中出现的顺序处理。因此,如果您想包含特定文件并排除其余所有文件,则应先使用 `--include`,然后使用 `--exclude='*'`。

  • `--include='*.txt' --exclude='*'` (包含所有 `.txt` 文件,排除其余)
  • `--exclude='*' --include='*.txt'` (排除所有文件,`.txt` 文件也会被排除 - 结果可能不符合预期)

利用测试运行 (`--dry-run`)

在实际同步重要数据之前,请务必使用 `-n` 或 `--dry-run` 选项检查预期行为。这对于防止意外的文件排除或包含非常有效。

  • `rsync -avn --exclude='*.log' /path/to/source/ /path/to/destination/`

使用 `-vv` 选项进行调试

当排除规则未按预期工作时,添加 `-vv` (verbose) 选项可以帮助调试,因为 `rsync` 会输出详细信息,说明它跳过了哪些文件以及是根据哪个规则排除的。

  • `rsync -avv --exclude='*.bak' /path/to/source/ /path/to/destination/`

相同类别命令