27

我已将网站从一台服务器移动到另一台服务器,并使用 SCP 复制了文件

我现在想检查所有文件是否都已复制好。

我如何比较这些网站?

计算文件夹的文件?

获取文件夹树的总文件大小?

还是有更好的方法来比较这些网站?

保罗

4

10 回答 10

59

将 diff 与递归-r和快速-q选项一起使用。这是最好的也是迄今为止最快的方法。

diff -r -q /path/to/dir1 /path/to/dir2

它不会告诉你有什么区别(删除 -q 选项以查看),但它会很快告诉你所有文件是否相同。

如果它没有显示输出,则所有文件都相同,否则它将列出不同的文件。

于 2013-05-06T18:06:24.540 回答
15

如果您使用的是 scp,您可能已经使用了rsync

rsync 不会传输已经是最新的文件,因此您可以使用它来验证副本是否是最新的,只需再次运行 rsync。

如果你在旧主机上做这样的事情:

scp -r from/my/dir newhost:/to/new/dir

然后你可以做类似的事情

rsync -a --progress from/my/dir newhost:/to/new/dir

'-a' 是 'archive' 的缩写,它执行递归复制并保留权限、所有权等。查看手册页以获取更多信息,因为它可以做很多聪明的事情。

于 2009-01-18T12:57:31.180 回答
10
cd website
find . -type f -print | sort | xargs sha1sum

将生成文件的校验和列表。然后您可以diff查看是否有任何丢失/添加/不同的文件。

于 2009-01-18T12:43:42.453 回答
5

也许你可以使用类似的东西:

find <original root dir> | xargs md5sum  > original
find <new root dir> | xargs md5sum  > new
diff original new
于 2009-01-18T12:45:17.163 回答
1

如果您使用 scp,您可能还可以通过 ssh 使用 rsync。

rsync -avH --delete-after 1.example.com:/path/to/your/dir 2.example.com:/path/to/your/

rsync 为你做校验和。

请务必使用 -n 选项执行试运行。检查手册页。

每次我可以使用它时,我都更喜欢 rsync 而不是 scp 甚至是本地 cp。

如果 rsync 不是一个选项,md5sum 可以生成 md5 摘要并且 md5sumc --check 将检查它们。

于 2009-01-18T12:57:05.983 回答
1

补充西德尼的回复。过滤掉-type f 并产生哈希码不是很必要。作为对 zidarsk8 的回复,您不需要排序,因为 find 与 ls 一样,默认按字母顺序对文件名进行排序。它也适用于空目录。

总而言之,前 3 个最佳答案是:(PS Nice to do a dry run with rsync)

diff -r -q /path/to/dir1 /path/to/dir2

diff <(cd dir1 && find) <(cd dir2 && find)

rsync --dry-run -avh from/my/dir newhost:/to/new/dir
于 2016-03-14T10:05:07.880 回答
0

对所有文件进行校验和,例如使用md5sum。如果所有文件都相同并且没有文件丢失,则一切正常。

于 2009-01-18T12:40:44.537 回答
0

尝试递归地区分你的目录。如果其中一个目录有不同之处,您会得到一个很好的总结。

于 2009-01-18T12:42:33.923 回答
0

我已经将网站从一台服务器移动到另一台服务器我使用 SCP 复制了文件

你可以用 rsync 来做到这一点,如果你只是想镜像一些东西,那就太好了。

/约翰

更新:似乎@rjack 用 6 秒的 rsync 答案击败了我 :-)

于 2009-01-18T12:57:12.177 回答
0

我会将此添加到 Douglas Leeder 或 Eineki,但遗憾的是,没有足够的声誉来发表评论。无论如何,他们的答案都很棒,除了它们不适用于带有空格的文件名。为了使这项工作,做

find [dir1] -type f -print0 | xargs -0 [preferred hash function] > [file1]

find [dir2] -type f -print0 | xargs -0 [preferred hash function] > [file2]

diff -y [file1] [file2]

只是从实验中,我也喜欢在 diff 上使用 -W ### 论证并将其输出到文件中,更容易在终端中解析和理解。

于 2014-01-10T00:43:27.520 回答