如何在 rsync 中指定“除这些扩展名之外没有文件”?

如何在 rsync 中指定“除这些扩展名之外没有文件”?

我使用 find 命令查找感兴趣的目录名并按此格式格式化它们,创建了一个 rsync --include-from 文件,+ dirname/***该文件会复制它及其内容。这按预期工作,但为了减少总传输大小,我需要进一步指定一些我想包含的文件类型,并排除所有其他文件类型。

我遇到的问题是找到一条排除所有文件但不排除目录的规则(有些目录.的名称中带有,这使得它更加困难)。看起来- ! */这正是我想要的(从rsync 手册页),因为它应该排除任何非目录的内容(意味着所有文件?)但它似乎从未匹配任何东西。

目前我的包含文件的格式如下:

+ 所需文件扩展名+ *.txt

- 所有其他文件(问题,尝试- ! */

+ 所有需要的目录及其内容+ cooldir/***

- *

任何帮助都将不胜感激

答案1

包含和排除选项从左到右应用:对于任何给定的文件或目录,第一个匹配的选项即被应用。

在您的案例中,您需要在包含之前声明排除项。以下是使用显式--include和 --exclude options rather than the more generic--filter` 选项的示例

-avHXP                         # My standard set of options
--include 'essentials/***'     # Include absolutely everything in here
--exclude '*.tmp'              # Exclude *.tmp files from everywhere else
--exclude '*.sh'               # Exclude *.sh files from everywhere else
--include 'interesting/***'    # Include this directory tree (not *.tmp or *.sh)
--include 'exciting/***'       # Include this directory tree too (not *.tmp or *.sh)
--prune-empty-dirs             # Don't create directories that would end up being empty

排除所有文件但包含目录的一般方法是这样的。一旦你开始包含文件,你几乎肯定会想要这个--prune-empty-dirs选项

--include '**/'
--exclude '*'

相关内容