我正在尝试将 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
命令中将其删除。