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

kla*_* se 6 rsync data-synchronization

我希望rsync排除包含具有特定名称的文件的所有目录,例如".rsync-exclude",与".rsync-exclude"文件的内容无关.

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

但是,应该排除目录,而不依赖于".rsync-exclude"文件的内容(至少应该可以将".rsync-exclude"文件留空).

有任何想法吗?

mna*_*gel 5

rsync不支持此功能(至少手册页未提及任何内容),但是您可以分两个步骤进行操作:

  1. 运行find查找.rsync-exclude文件
  2. 通过管道将此列表发送到--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.
    
    Run Code Online (Sandbox Code Playgroud)

或者,如果您不介意在文件中放入某些内容,则可以使用:

       -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.
Run Code Online (Sandbox Code Playgroud)


sil*_*ium 5

老问题了,不过我也有同样的问题..

您可以添加以下过滤器:

--filter="dir-merge,n- .rsync-exclude"
Run Code Online (Sandbox Code Playgroud)

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

#.rsync-exclude file

folderYouWantToExclude
allFilesThatStartWithXY*
someSpecialImage.png
Run Code Online (Sandbox Code Playgroud)

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

你不能做的是:

#.rsync-exclude file

folder/someFileYouWantToExlude
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!干杯