编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

重要:rsync路径末带斜杠/与不带斜杠/的区别总结

wxchong 2024-10-17 17:04:12 开源技术 18 ℃ 0 评论

为什么要区别带不带【/】?假如在同步A目录到B目录后,要查看A目录中有哪些新增文件的时候,你会发现会因为少一个【/】,就可能会永远得不到正确结果。

一、首先还是来说一下rsync的语法:

rsync [OPTION] SRC DEST 说明:SRC = 源路径 DEST=目表路径

更详细的说明可以看之前的文章《2张图1个表说明rsync的三种模式11种命令格式》

那么,如果要同步A目录到B目录(所有示例命令在windows主机上测试),就会有以下4种写法:

rsync -av /cygdrive/d/A /cygdrive/d/B 即SRC、DEST路径末都不带/

rsync -av /cygdrive/d/A /cygdrive/d/B/ 即SRC路径末不带/,DEST路径末带/

rsync -av /cygdrive/d/A/ /cygdrive/d/B 即SRC路径末带/,DEST路径末不带/

rsync -av /cygdrive/d/A/ /cygdrive/d/B/ 即SRC、DEST路径都带/

换句话说就是,源和目标路径末都带【/】、都不带【/】、一个带【/】一个不带【/】有什么不同的地方?

二、带不带【/】同步结果的区别:

好吧上边说了很多,看起来是不是很绕?直接看下边图示的总结表:

这一点与lftp路径后边的【/】刚好是相反的,见之前文章《Linux使用lftp替换ftp命令备份网站到FTP服务器》。

三、具体对比一下几条命令的区别:

rsync -av /cygdrive/d/A /cygdrive/d/B

rsync -av /cygdrive/d/A /cygdrive/d/B/

上边两条命令效果相同,执行后目录结构对比如下图:



rsync -av /cygdrive/d/A/ /cygdrive/d/B

rsync -av /cygdrive/d/A/ /cygdrive/d/B/

上边两条命令效果相同,执行后目录结构对比如下图:

说了半天,说明这些有什么作用呢?正如之前《rsync如何查看源目录有哪些新增文件?》一文描述的那样:假如在同步A目录到B目录后,要查看A目录中有哪些新增文件的时候就会有非常大的差别。

  1. 当使用以下两条命令同步后:源路径不带【/】,B目录中将会多一层A目录;

    rsync -av /cygdrive/d/A /cygdrive/d/B

    rsync -av /cygdrive/d/A /cygdrive/d/B/

    要查看A目录中有哪些新增的文件,需要使用如下命令:

    rsync -avn --delete /cygdrive/d/B/A/ /cygdrive/d/A/

    或者:

    rsync -avn --delete /cygdrive/d/B/A/ /cygdrive/d/A

  2. 当使用以下两条命令同步后:源路径带【/】,B目录结构与A目录完全一致;

    rsync -av /cygdrive/d/A/ /cygdrive/d/B

    rsync -av /cygdrive/d/A/ /cygdrive/d/B/

    要查看A目录中有哪些新增的文件,需要使用如下命令:

    rsync -avn --delete /cygdrive/d/B/ /cygdrive/d/A/

    或者:

    rsync -avn --delete /cygdrive/d/B/ /cygdrive/d/A

也就是说当要查看A目录中有哪些新增的文件的时候一定要注意在将B目录当做源路径的时候后边是必须要有【/】的,否则肯定永远是失败的。

正确结果应该是如下图:

不正确结果如下图:



总结:总而言之一句话就是【/】在目标路径中有没有都无所谓,但是在源路径中有和没有是有很大区别的。那么为了避免出现各种比较绕的情况下,建议使用源路径和目标路径都带上【/】,如下所示命令
rsync -av /cygdrive/d/A/ /cygdrive/d/B/

可以想象一下在脚本中使用变量表示路径的时候带【/】和不带【/】所带来的影响?

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表