Rsync通过通配符忽略文件和文件夹

Rsync通过通配符忽略文件和文件夹

当我使用文件夹名称和通配符从删除服务器下载时,我想忽略特定文件夹下的任何文件或文件夹。

我想排除“/*.old/”下的所有文件或文件夹,但该文件夹可以存在于多个位置。

我是否必须指定具有多个条目的位置,例如?或者有一种方法可以让我在旧文件夹出现的任何地方都排除它?

--exclude='*/*.old*/*'
--exclude='*/*/*.old*/*'
--exclude='*/*/*/*.old*/*'
--exclude='*/*/*/*/*.old*/*'

这是我正在使用的命令

rsync -amHAXxzvR --update --numeric-ids --progress  --include='*/' --include=*.sas7bdat --exclude='*.old/' --exclude=* -e "ssh -T -c blowfish-cbc -o Compression=yes -x" [email protected]:/XXX/ /mnt/z/XXX/.

我想排除名称为 /sasdata.old/ 的任何文件夹及其子文件夹。此文件夹可以位于任何位置。

答案1

您只需将其指定为不依赖于源树顶部的目录:

--exclude '*.old/'

现在看到你的完整命令后,很清楚为什么你仍然无法让它工作。包含和排除选项从左到右应用:对于任何给定的文件或目录,第一个匹配的文件或目录就是所应用的文件或目录。因此,在您的情况下,您需要先排除不需要的目录,然后再将它们全部包含在内。

我对超级用户的回答了解完整详情。

尝试这个,

rsync -aHAX -xu -z -v -R --numeric-ids --progress --prune-empty-dirs \
    --exclude='*.old/' --include='*/' \
    --include='*.sas7bdat' --exclude='*' \
    -e "ssh -T -c blowfish-cbc -x" \
    [email protected]:/XXX/ /mnt/z/XXX/.

相关内容