![rsync 仅输出已传输/删除的文件](https://linux22.com/image/742878/rsync%20%E4%BB%85%E8%BE%93%E5%87%BA%E5%B7%B2%E4%BC%A0%E8%BE%93%2F%E5%88%A0%E9%99%A4%E7%9A%84%E6%96%87%E4%BB%B6.png)
我在 cronjob 中运行 rsync,并使用在 cronjob 中重定向 rsync 的输出
/opt/rsync.sh ... > /var/log/rsync.log 2>&1
我知道,我可以让 rsync 输出只是传输字节数的摘要等等。我还知道我可以让 rsync 详细打印每个文件传输的百分比。但是当我将详细输出重定向到一个文件时,它会为每个文件生成一个输出列表,因为它经常将百分比发送到 stdout。
我怎样才能在两者之间取得一些东西,打印传输的每个文件以及每个文件的处理百分比的摘要(但不是多行)?
答案1
据我了解,您正在执行 rsync 并将 STDOUT 重定向到文件 - 类似于
rsync -avz mydir targetserver: > rsync.log
如果是这样,那么您只需使用参数--log-file=rsync.log
告诉它直接写入所述日志文件,而不是使用 STDOUT。因此上面的命令行可以改为
rsync --log-file=rsync.log -avz mydir targetserver:
另一个选择是--progress
从 rsync 命令中删除该选项,这样就不会显示百分比。
对于脚本来说,用--progress
列出已做哪些类型更改的输出格式来替换可能更有意义。使用选项可以轻松完成itemize-changes
。从手册页中:
-i, --itemize-changes
请求对每个文件所做的更改(包括属性更改)的简单逐项列表。这与指定 --out-format='%i %n%L' 完全相同。如果重复该选项,则还会输出未更改的文件,但前提是接收 rsync 至少为 2.6.7 版(您可以将 -vv 与较旧版本的 rsync 一起使用,但这也会打开其他详细消息的输出)。