因为前期已经一次性做了个同步,文件很多,所以不可能还是整体上传一遍,只希望按文件修改时间复制一遍就行了,希望用linux的shell编程来实现,但对shell编程不熟悉,不知道这里可有会的?

解决方案 »

  1.   

    用代码管理工具实现可能更容易一些.
    在本地check in.
    在服务器update,就更新所有修改过的了.
      

  2.   

    不行,不想用svn,我们本地开发是用svn的,但我不想用这种方式发布更新,
    现在就是想这样
    使用shell编程,利用linux的文件查找命令找出修改时间为某个时间点以后的文件,然后把这些文件以cp或者比如scp之类的命令传出远程服务器去
      

  3.   

    对,最好装上svn或者cvs,还用shell去实现未免太折腾了,要考虑长远,有好工具为什么不用呢。
    一个成熟点的项目开发,即使只有一个人维护代码,不装上版本控制环境是不行的。
      

  4.   

    已经有svn了,还要用shell,如果你是想提高一下shell的能力的话,无可厚非.
      

  5.   

    你checkout一下不就好了。。折腾
      

  6.   

    shell很折腾?
    我是按照以前玩DOS系统的思维来考虑,比如:scp可以将文件用本地传输到远程
    find命令可以查找指定时间点的所有文件
    |可以做管道传输我现在只是不知道,如何利用管道命令,将一个命令的输出用作另一个命令的输入而已,如果按照这个思路可以实现的话,应该也是就是一条语句就搞定了.
    这会很折腾?
      

  7.   

    刚用了rsync,发现两点不足:
    1、我希望指定其中某些子目录不同步,不知道能否实现?
    2、新增文件、修改文件都能同步没错,但是如何是删除某个文件呢,我希望某个文件在本地删除的话,同步后的远程服务下,相应目录也应删除某个文件,不知道能否实现?若能解决这两个问题,我可以再加分,谢谢了
      

  8.   

    不是,我告诉你我为什么不想用svn,最大的问题就是update后,每个目录下都有.svn这个目录,我不想在远程工作服务器中存在这样多余的东西,明白了吗?
    另外rsync的删除同步问题已经解决了
      

  9.   


    应该有exclude功能的,man一下吧
    国内好几个比较大(市值过百亿)的公司用rsync,应该没什么问题吧
      

  10.   

    嗯,刚研究出来,确实不错了给大家都来个参考吧,呵呵rsync -vazu -p --delete --exclude=.svn /var/www/html/myweb /var/bak/
    #同步myweb目录(包括子目录和文件)到/var/bak/看下参数是不是还有调整的地方,大家可以一起来讨论下
      

  11.   

    还有个问题需要解决下,就是如果是往远程服务器传的话,做到定时工作,那么输入密码就成了问题(在没做ssh同效登录的情况下),不知道怎么解决?比如:rsync -vazu -p --delete --exclude=.svn /var/www/html/myweb [email protected]:/var/bak/ 执行后需要输入远程机器的口令,如此一来,如何放在定时脚本中使用?
      

  12.   


    定时一般放到crontab里,输入密码可以用expect解决
      

  13.   

    expect需要独立安装?我rhel5.4里没有的?另外请问下,如果不用expect,就使用linux的内部支持命令能实现自动输入口令吗?比如使用管道命令传输口令给rsync?
      

  14.   


    自己装一个吧,发行版不带这个很正常。
    几乎所有情况,shell内部命令不能实现自动输入密码。
    因为expect已经很好用了,所以程序本身一般不会考虑这个问题。如果可以的话,你可以试试看把ssh搞成其它方式登陆,然后rsync里使用ssh做传输。
    设置下public key和privacy key,放到相应的目录下就可以了,不用输入密码就能登陆。别把key泄漏给不该看到key的人就没有安全问题了。
      

  15.   


    rsync里有个参数,表示在des机器上删除source机器没有的文件
      

  16.   

    哦,那看来就只能装expect了,明天试试看,你能给我上面那个语句写到expect脚本自动输入密码吗,明天我就装上好直接试试看
      

  17.   

    #!/bin/bashexpect -c "spawn ssh 127.0.0.1; expect password:; send  mima\n; interact"
      

  18.   

    用svn就可以做到。svn可以导出两个版本之间修改过的文件。然后你把导出的文件复制到线上。
      

  19.   

    钻牛头角??
    有SVN不用要用SHELL?---------------------------用技术换广告,谢谢支持------------------------------------------------
    Ventes Batteries PC Portable, Alimentation PC Portable, Batteries Camescope, Appareil Numerique, des Chargeurs
    rolex watches, Replica Watches, Replica Watch
    R4DS Cartes, Cartes R4, R4 DSi, R4 SDHC Pour Nintendo DS / DS, Dsi 
    baterias
    R4DS Cartes, Cartes R4, R4 DSi, R4 SDHC Pour Nintendo DS / DS, Dsi
    R4DS Cartes, Cartes R4, R4 DSi, R4 SDHC Pour Nintendo DS / DS, Dsi
    R4DS Cartes, Cartes R4, R4 DSi, R4 SDHC Pour Nintendo DS / DS, Dsi
    R4DS Cartes, Cartes R4, R4 DSi, R4 SDHC Pour Nintendo DS / DS, Dsi
      

  20.   


    不想用.svn这些多余的东西,使用svn做的到?如果可以做到,请帮忙解答一下,谢谢!
      

  21.   

    diff
    patch
    两个命令结合也可以完成
      

  22.   

    楼主对Linux系统了解十分不足,建议看书看手册
      

  23.   

    #!/usr/bin/expect
    # 同步目录spawn rsync -vazu -p --delete --exclude=.svn /var/www/html/myweb [email protected]:/var/www/html/
    expect "password: "
    send "mypassword\n"
    expect eof
    exit写了个expect脚本,可是执行不成功,也没报任何错误,不知道是什么原因?当脚本执行到spawn rsync -vazu -p --delete --exclude=.svn /var/www/html/myweb [email protected]:/var/www/html/这条语句时,并没有看到提示输入密码的文件,当后面的send "mypassword\n"还是执行了,不知道怎么会这样?
      

  24.   

    都搞定了,主要是expect等待时机的选择上的问题,谢谢各位
      

  25.   

    expect eof 改成 interact,看看执行过程中是哪一步出了问题
      

  26.   

    可以试一下我用php编写的一个文件同步程序,在我的资源中.
    我想你在自己的电脑上有web服务器,把同步程序放到本地和远程服务器的根目录下,通过该程序可以自动遍历目录,列出文件变动,可以双向同步.需要注意的是,要有curl支持