我必须不断将文件从 ~/src 复制到 /home/httpd 目录,这在进行前端更改时很麻烦。有没有办法让更改的文件自动同步?——特别是仅在我开发时——我可以打开和关闭它。
答案1
虽然不是自动的,但是一旦完成修改,就可以使用 rsync:
$ rsync -r --delete /home/username/src/ /home/httpd
您甚至可以创建一个别名:
$ alias sync='rsync -r --delete /home/username/src/ /home/httpd'
正如我向大家强调的那样,在使用它之前,您应该检查man rsync
其他选项。
另外,我强烈建议版本控制(SVN 版本或者git或许,原因有很多。
编辑:
我个人会使用bash
循环---特别是while
使用 的循环sleep
。在 shell 中输入以下内容:
while true; do
sleep 300 # Every 5 minutes
rsync -r --delete /home/username/src/ /home/httpd
done &
这将使其成为一个您可以随时终止的后台作业。只需键入jobs
即可查看作业的索引,当您不再需要它时,请键入kill %(index)
。
或者,要将命令添加为cron
作业(例如每 10 分钟一次),请将以下内容附加到您的 crontab:
*/10 * * * * rsync -r --delete /home/username/src/ /home/httpd
要编辑你的 crontab:
$ crontab -e
答案2
我不完全确定你的目标是什么,但以下几点建议可能会有所帮助:
修改后立即保存: 如果您希望在修改文件后立即更新文件,我可能会问您为什么不直接在 /home/httpd 中进行更改,然后在一切满意后再将它们复制回来。如果要立即复制更改,则工作目录作为保障措施(或防止因错误的编辑而导致网站瘫痪)的想法就毫无意义了。
修改后几乎立即生效:
如果出于某种原因,您希望在文件修改时几乎立即应用更改(即,一旦保存文件,它就会被复制),那么我建议您查看incron
。它可以设置为在目录更改时触发脚本。
按需(非即时):
如果您希望完成所有编辑,然后推送更改(我期望您这样做),那么您有几种选择。我推测麻烦在于确定哪些文件被更改,然后从各种不同的目录中复制它们。
Shell 脚本:
一个简单的解决方案是使用rsync
。它将确定您的 ~/src 目录中相对于您的 /home/httpd 目录的更改,并进行必要的更改以使您的 /home/httpd 与源目录同步。
版本控制: 最有效的解决方案是版本控制,例如 Subversion,尽管它比 rsync 复杂得多。基本上:
- 在您的服务器上创建存储库
- 将文件导入存储库
- 检出 /home/httpd 的工作副本
- 设置一个将更新 /home/httpd 的提交后钩子
- 将工作副本检出到 ~/src
- 进行更改并将其提交到存储库(
svn commit
) - 钩子将自动更新 /home/httpd
虽然设置起来比较困难,但最初,这种方法允许最大程度的控制,并且可以让您轻松回滚更改,列出修改后的文件,并查看每次修订时所做的更改(差异) - 您还可以在每次提交时为更改添加描述。
答案3
看着同步。它使用 inotify 获取有关文件更改的信息并通过 rsync 同步它们。