Rsync 本地和服务器上文件夹路径对应的问题?

为了把本地的 repo/ 目录对应上传到 VPS 的 repo/ 我写了这样的脚本,
以便运行 up a 时, repo/a/ 能在服务器同步出现 repo/a:

function up {
  rsync -avzl --delete --stats --progress \
  --exclude-from /Users/chen/repo/.rsyncignore \
  ~/repo/$1 \
  digital:/home/chen/repo/
}

为了单独同步名字是 repo/cirru/ 的子目录, 我又增加了一个脚本,
对应两边的路径增加了 cirru, 以便同样的目录结构被拷贝:

function upcirru {
  rsync -avzl --delete --stats --progress \
  --exclude-from /Users/chen/repo/.rsyncignore \
  ~/repo/cirru/$1 \
  digital:/home/chen/repo/cirru/
}

然而运行 upcirru a 时, 问题出现了, 本地使用的是 repo/cirru/a 路径,
而服务器上对应变成了 repo/cirru/ 而不是预期的 repo/cirru/a.

就是说, 在两个不同的目录输入时, 目标文件的确定是不同的...
我很不理解这里发生了什么... 不知道是否有同学遇到过类似问题?

阅读 5.1k
1 个回答

rsync的一个坑是rsync a b/rsync a/ b/是不同的。

前者是把a同步到b/a,后者是把a同步到b/

然而运行 upcirru a 时, 问题出现了, 本地使用的是 repo/cirru/a 路径,
而服务器上对应变成了 repo/cirru/ 而不是预期的 repo/cirru/a

目测你运行的不是真的upcirru a,而是输入了a的前几个字母后按了tab补全,然后自动给你补成了upcirru a/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进