仅对 rsynced 文件触发操作

Trigger an action for just rsynced files

我使用以下行将静态 HTML 文件同步到我们的网络服务器:

rsync -rlpcgoDvz --delete _site/* x@xx.de:/var/www/x/public/

为了预热网络服务器的缓存,我想在同步文件后立即获取同步文件。使用 wget http://www.xx.de/bla/foo.htmlcurl

有没有办法告诉 rsyncbash shell 这样做?

我想您可以通过多种方式做到这一点。我想到的一个:

第 1 步:--log-file 选项添加到 rsync,以便您最终获得所执行操作的日志。例如:

rsync -rlpcgoDvz --log-file=log --delete _site/* x@xx.de:/var/www/x/public/

这个日志看起来像这样,例如(传输 4 个文件的日志,名为 "file1"、"file2"、"file3"、"file4"):

2015/02/13 12:52:11 [54686] receiving file list
2015/02/13 12:52:11 [54686] >f+++++++ file1
2015/02/13 12:52:11 [54686] >f+++++++ file2
2015/02/13 12:52:11 [54686] >f+++++++ file3
2015/02/13 12:52:11 [54686] >f+++++++ file4

我们对 >f+++++++ 字段感兴趣,下一个是文件名。 See this answer 以获得对此处预期内容的简短解释。

第 2 步:

传输完成后,提取文件名并调用 wget 每个:

cat log | grep ">f++++++" | cut -d \  -f 5 | while read -r filename; do wget "http://www.xx.de/$filename"; done

逐条分解:

cat log | \              # Pipe the file     
grep ">f++++++" | \      # Take only interesting lines.
                         # Here - only files which were not present 
                         # on the other end.
cut -d \  -f 5 | \       # Take the file name.
while read -r filename; do wget "http://www.xx.de/$filename"; done

您可能需要调整一些文件路径等以适合您的用例。