Rsync 特定模式,但排除同一路径中的其他文件

Rsync 特定模式,但排除同一路径中的其他文件

里面有很多文件/dapp/parsD/parsapp/object。我只想要rsync这个目录中匹配 * 的文件.sql, *.pl和 *.sh,但我还想排除同一目录中以以下结尾的 2 个特定模式.sh

这可能吗?我在跑步HP-UX 11i在源和目的地上。rsync版本是3.1.0

下面的内容可能更容易想象。在开发服务器上,'X' 或者 'X' 被 ' 替换d' 或者 'D',在生产服务器上,它将是 'p' 或者 ''。

包括以下文件:

/xapp/parsX/parsapp/object/*.sql
/xapp/parsX/parsapp/object/*.pl
/xapp/parsX/parsapp/object/*.sh

但排除以下文件:

 /xapp/parsX/parsapp/object/getbackdate*autosys.sh
 /xapp/parsX/parsapp/object/parssendevent*.sh

答案1

rsync包含/排除/过滤规则可能很难使用,但最终非常灵活。这是做你想做的事情的一种方法:

rsync --include-from=- /xapp/parsX/parsapp/object/ dest_dir <<EOF
- getbackdate*autosys.sh
- parssendevent*.sh
+ *.sql
+ *.pl
+ *.sh
- *
EOF

制造--include-fromrsync从 读取模式stdin,如果没有这个,您可以将每个模式指定为单独的--include--exclude选项。您还可以将规则放入文件中并指定名称或用于在其读取的每个目录中-F查找rsync文件。.rsync-filter

另请注意,模式的顺序也很重要。根据第一个匹配的模式包含/排除文件。此外,- *最后的规则对于使包含规则起作用是必要的,因为默认情况下包含所有内容。但是,这对于递归传输可能会出现问题,因为它排除了所有未明确包含的目录。解决此问题的一种方法是包含一条+ **/包含所有目录的规则。

相关内容