仅对 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.html
或 curl
。
有没有办法告诉 rsync
或 bash
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
您可能需要调整一些文件路径等以适合您的用例。
我使用以下行将静态 HTML 文件同步到我们的网络服务器:
rsync -rlpcgoDvz --delete _site/* x@xx.de:/var/www/x/public/
为了预热网络服务器的缓存,我想在同步文件后立即获取同步文件。使用 wget http://www.xx.de/bla/foo.html
或 curl
。
有没有办法告诉 rsync
或 bash
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
您可能需要调整一些文件路径等以适合您的用例。