某些文件无法通过 rsync 在两台服务器之间传输

某些文件无法通过 rsync 在两台服务器之间传输

我使用带有 -av 参数的 rsync 将网站从一台服务器迁移到另一台服务器。没有显示任何错误,但文件夹的大小不一样,网站无法正常工作。所以缺少了一些东西。是否有一个参数可以真正复制所有内容?我在两边都有 sudo 帐户。

我使用 检查文件夹大小du -s dir,其大小如下:

old server : 2554620

new server : 2547676

它以字节为单位。我怎样才能获得精确的副本?

字数统计输出:

old server :  2663    3105  175534
new server :  2665    3107  175594

答案1

某些文件可能不符合 rsync 的默认大小和日期。让 rsync 根据校验和进行传输。这样会比较慢,但如果文件有任何变化,就会被传输。

rsync -cav <source> <destination>

如果您想检查它是否会传输您想要的文件,请在命令末尾添加 -n 以进行试运行。然后,您可以检查列表中是否有丢失的文件,或者更简单的是,如果您知道之前没有传输过某个特定文件名,只需 grep 即可!

rsync -cav <source> <destination> -n | grep some-missing-filename

更新:如果您不确定文件夹的内容是否相同,那么您可以使用以下内容轻松检查:

在每个服务器上:

cd /to/root/of/your/website
find . | md5sum

然后比较输出的 md5 校验和,如果数字相同,则表示文件相同(例如,server1 和 server2 上的 file1),尽管这不能解释文件内容不同

如果您想查看一个文件中存在哪些文件,而另一个文件中不存在哪些文件,那么您当然可以将目录列表输出到文件中:

cd /to/root/of/your/website
find . > server1.txt

...在两台服务器上,然后

diff server1.txt server2.txt

最后再说一句:

scp -r user@server1:/path/to/website /path/to/website

答案2

我刚刚遇到一个问题,并非所有文件都能按预期传输。我同步到我的笔记本电脑(Fedora 37),它工作正常,但当我同步到我的 pi(Debian bullseye)时,并非所有文件都在那里。错误是我的。也许你也有同样的问题。我的命令如下所示:

rsync file/path/version\ 1.1/ user@remotehost:/file/path/version\ 1.1

我遇到的问题是“版本 1.1”中的空格,我的解决方案是在路径上加上引号。

rsync file/path/version\ 1.1/ user@remotehost:"/file/path/version\ 1.1"

我不记得这种风格叫什么了,但你必须知道你的程序、系统等支持什么风格。我猜我的 Fedora 设置接受没有引号的转义空格,而我的 pi 不接受。

相关内容