使 rsync 排除所有包含具有特定名称的文件的目录

Posted

技术标签:

【中文标题】使 rsync 排除所有包含具有特定名称的文件的目录【英文标题】:Make rsync exclude all directories that contain a file with a specific name 【发布时间】:2013-07-16 16:24:00 【问题描述】:

我希望 rsync 排除包含具有特定名称的文件的所有目录,例如“.rsync-exclude”,独立于“.rsync-exclude”文件的内容。

如果文件“.rsync-exclude”只包含“*”,我可以使用rsync -r SRC DEST --filter='dir-merge,- .rsync-exclude'

但是,应该独立于“.rsync-exclude”文件的内容排除该目录(至少应该可以将“.rsync-exclude”文件留空)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

rsync 不支持这一点(至少手册页没有提及任何内容),但您可以分两步完成:

    运行find 查找.rsync-exclude 文件

    将此列表通过管道传输到--exclude-from(或使用临时文件)

       --exclude-from=FILE
          This option is related to the --exclude option, but it specifies a FILE that contains exclude  patterns
          (one per line).  Blank lines in the file and lines starting with ';' or '#' are ignored.  If FILE is -,
          the list will be read from standard input.
    

或者,如果您不介意在文件中添加内容,您可以使用:

       -F     The -F option is a shorthand for adding two --filter rules to your command.  The first time it is  used
          is a shorthand for this rule:

             --filter='dir-merge /.rsync-filter'

          This  tells  rsync  to  look for per-directory .rsync-filter files that have been sprinkled through the
          hierarchy and use their rules to filter the files in the transfer.  If -F is repeated, it is  a  short-
          hand for this rule:

             --filter='exclude .rsync-filter'

          This filters out the .rsync-filter files themselves from the transfer.

          See the FILTER RULES section for detailed information on how these options work.

【讨论】:

【参考方案2】:

老问题,但我有同样的问题..

您可以添加以下过滤器:

--filter="dir-merge,n- .rsync-exclude"

现在您可以将 .rsync-exclude 文件放在任何文件夹中,并逐行写入要排除的文件和文件夹的名称。例如:

#.rsync-exclude file

folderYouWantToExclude
allFilesThatStartWithXY*
someSpecialImage.png

所以你也可以在那里使用模式。

你不能做的是:

#.rsync-exclude file

folder/someFileYouWantToExlude

希望对您有所帮助!干杯

【讨论】:

【参考方案3】:
rsync -avz --exclude 'dir' /source /destination 

【讨论】:

请在答案中添加简短描述,以帮助用户理解

以上是关于使 rsync 排除所有包含具有特定名称的文件的目录的主要内容,如果未能解决你的问题,请参考以下文章

使用 Bamboo SCP 任务排除具有特定扩展名的文件的语法是啥?

rsync排除所有目录的隐藏文件

如何在 rsync 中使用包含和排除优先级?

rsync文件/文件夹来自输入文件中的列表,并从排除文件中排除

XPath 获取除具有特定名称的子元素之外的所有子元素?

linux 上查找包含特定文本的所有文件