我使用带有 -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 不接受。