我已将网站从一台服务器移动到另一台服务器,并使用 SCP 复制了文件
我现在想检查所有文件是否都已复制好。
我如何比较这些网站?
计算文件夹的文件?
获取文件夹树的总文件大小?
还是有更好的方法来比较这些网站?
保罗
将 diff 与递归-r
和快速-q
选项一起使用。这是最好的也是迄今为止最快的方法。
diff -r -q /path/to/dir1 /path/to/dir2
它不会告诉你有什么区别(删除 -q 选项以查看),但它会很快告诉你所有文件是否相同。
如果它没有显示输出,则所有文件都相同,否则它将列出不同的文件。
cd website
find . -type f -print | sort | xargs sha1sum
将生成文件的校验和列表。然后您可以diff
查看是否有任何丢失/添加/不同的文件。
也许你可以使用类似的东西:
find <original root dir> | xargs md5sum > original
find <new root dir> | xargs md5sum > new
diff original new
如果您使用 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 将检查它们。
补充西德尼的回复。过滤掉-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
对所有文件进行校验和,例如使用md5sum。如果所有文件都相同并且没有文件丢失,则一切正常。
尝试递归地区分你的目录。如果其中一个目录有不同之处,您会得到一个很好的总结。
我已经将网站从一台服务器移动到另一台服务器我使用 SCP 复制了文件
你可以用 rsync 来做到这一点,如果你只是想镜像一些东西,那就太好了。
/约翰
更新:似乎@rjack 用 6 秒的 rsync 答案击败了我 :-)
我会将此添加到 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 ### 论证并将其输出到文件中,更容易在终端中解析和理解。