两台linux 服务器同步修改的文件

两台服务器同步修改的文件

为什么用*会报错?

  1. 未指定递归scp默认只拷贝单个文件。如果不加-r参数,遇到文件夹(如ressrcassets)时,它会报错not a regular file并跳过。
  2. 目标路径被本地 Shell 解析:你在本地终端输入目标路径/.../FactoryMode/*时,你本地的 Bash 会自动把*展开为本地该目录下的所有子文件名。这会导致scp接收到多个目标参数,从而引发混乱和类似cp: -r not specified的错误。

根据你的具体需求,有以下几种更好的解决方法:


方法一:使用rsync(最推荐,能自动同步修改过的文件)

既然你有许多修改过的文件(包括 Java、XML、Strings 等),使用rsync是最方便、最安全的方法。它会自动对比两台服务器的文件,只拷贝有修改的文件,并且会自动创建和维护目录结构。

在本地执行以下命令(注意源路径和目标路径结尾的/):

rsync -avz src/ dist/

  • 优点:不需要考虑哪些是文件夹哪些是文件,它会把两边的FactoryMode目录完美同步,且速度极快。

方法二:如果只需要那一个特定的aging_test.xml

如果你其实只需要这一个 xml 文件,不需要拷贝整个目录,直接指定该文件的完整路径进行scp即可:

scp aging_test aging_tests.xml


方法三:如果你坚持使用scp拷贝整个目录

如果要用scp拷贝包含子目录的完整文件夹,必须使用-r参数(代表 recursive,递归拷贝),且目标路径写到它的上一级目录(即apps目录),否则容易产生目录嵌套(例如在FactoryMode下又生成一个FactoryMode):
scp -r FactoryMode apps/