Rsync 排除包含完整路径的列表?

Rsync 排除包含完整路径的列表?

我正在尝试将 rsync 与排除参数一起使用。但有一个问题。

首先创建的文件列表早于 30 分钟

find /var/log/hosts/ -type f  -mmin -30 > list.txt

然后将其与排除一起使用

rsync -arvzh --exclude-from 'list.txt'  /var/log/hosts/  [email protected]:/Archive/Rsyslog_Logs/

但它不起作用;同步所有文件

list.txt 
/var/log/hosts/p_rsyslog/2021/05/11/14.log
/var/log/hosts/loggerarchive/2021/05/11/14.log
/var/log/hosts/node1/2021/05/11/14.log
/var/log/hosts/node2/2021/05/11/14.log
/var/log/hosts/node3/2021/05/11/14.log
...

答案1

排除文件中的文件路径需要相对于传输根目录/var/log/hosts/,因此路径list.txt应如下所示:

/p_rsyslog/2021/05/11/14.log
/loggerarchive/2021/05/11/14.log
/node1/2021/05/11/14.log
/node2/2021/05/11/14.log
/node3/2021/05/11/14.log

请注意,这些路径以前导开头,/被视为完整路径。如果没有前导,/它们将与路径的最终组成部分匹配,例如 node1/2021/05/11/14.log将匹配

/var/log/hosts/node1/2021/05/11/14.log

/var/log/hosts/another_dir/node1/2021/05/11/14.log

这可能是不希望的。

你可以跑

find /var/log/hosts/ -type f -mmin -30 | sed 's#^/var/log/hosts##' > list.txt

/var/log/hosts从排除文件中的每一行删除前缀。

请注意,该选项-r已包含在 中-a,您可以在rsync命令中将其删除。

相关内容