rsync:如何不递归地应用通配符排除

rsync: How to NOT apply wildcard excludes recursively

我正在使用 rsync 对 Matlab 模型进行本地备份(最终目标是一个 shell 脚本来自动备份我的关键博士文件)。

该模型有多层文件夹,我想在顶层排除一些通配符匹配,但在低层不排除。这可能吗?

示例文件结构:

/Model               % DO NOT WANT to sync *.mat files in this directory
/Model/Data/Greens   % WANT to sync *.mat files in this subdirectory

示例(简化)代码:

#!/bin/bash
rsync -a --exclude="*.mat" /Users/Me/MATLAB/Model /Volumes/KINGSTON/Backup

示例代码排除了所有文件夹级别中的所有 *.mat 文件。如何修复它以仅将 '*.mat' 通配符应用于顶级文件夹?

TL;DR:有没有一种方法可以递归地将 rsync 应用于所有子文件夹,但只将通配符排除应用于顶级文件夹?

默认情况下,*.mat 将匹配您文件夹中的所有 .mat 文件和所有 sub-directories。如果您只想忽略父目录中的 .mat 文件,可以将 Model/ 前缀添加到 exclude 指令以仅忽略该文件夹中的 .mat 文件

rsync -a --exclude="Model/*.mat" /Users/Me/MATLAB/Model /Volumes/KINGSTON/Backup

或者,如果您想在 Model/Data/Greens 文件夹中 只包含 .mat 文件,您可以将 --include 选项与 --exclude 选项

rsync -a --include="Model/Data/Greens/*.mat" --exclude="*.mat" /Users/Me/MATLAB/Model /Volumes/KINGSTON/Backup