我认为这很简单,但我在谷歌搜索中找不到任何东西,也许我搜索了错误的术语。
我有一台可以与另一台机器同步的机器。如果远程机器上的文件发生更改,则我需要在本地机器上运行其他脚本。但是,我似乎无法弄清楚如何在 rsync 命令上设置条件,以允许它仅在文件已更改/更新时运行其他脚本。
提前感谢!
答案1
没有明显的答案,比如一个选项,让你指定在发现更改时运行的脚本。但是,你可以使用该--stats
标志来生成有关所发生情况的统计数据,解析它们,并做出有根据的猜测。
$ rsync -avP --stats src dest
sending incremental file list
...
Number of files: 10
Number of files transferred: 2
Total file size: 27 bytes
Total transferred file size: 27 bytes
Literal data: 27 bytes
Matched data: 0 bytes
File list size: 253
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 411
Total bytes received: 82
sent 411 bytes received 82 bytes 986.00 bytes/sec
total size is 27 speedup is 0.05
你可以捕捉它并寻找Number of files transferred: 2
$ rsync -avP --stats src dest | grep 'Number of files transferred:'
Number of files transferred: 0
$ touch src/another
$ rsync -avP --stats src dest | grep 'Number of files transferred:'
Number of files transferred: 1
或者,为了更加谨慎,捕获输出并报告文件数量或未找到该行的情况(以防报告统计数据的方式发生变化)。
#!/bin/bash
set -e
tmpfile=$(mktemp)
rsync -avP --stats src dest | grep 'Number of files transferred:' >"$tmpfile"
if [[ $(wc -l < "$tmpfile") == "1" ]]; then
changedfiles=$(awk '{ print $5 }' <"$tmpfile")
else
changedfiles="ERROR"
fi
rm -f "$tmpfile"
echo CHANGEDFILES="$changedfiles"