我如何检查linux中的两个文件夹是否相同

时间:2009-01-18 12:36:33

标签: linux web

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

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

如何比较网站?

计算文件夹的文件?

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

或者有更好的方法来比较网站吗?

10 个答案:

答案 0 :(得分:31)

使用带有递归-r和快速-q选项的diff。这是最好的,也是迄今为止最快的方法。

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

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

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

答案 1 :(得分:10)

如果您使用的是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'的缩写,它执行递归复制并保留权限,所有权等。查看man page以获取更多信息,因为它可以做很多聪明的事情。

答案 2 :(得分:8)

cd website
find . -type f -print | sort | xargs sha1sum

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

答案 3 :(得分:3)

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

find <original root dir> | xargs md5sum  > original
find <new root dir> | xargs md5sum  > new
diff original new

答案 4 :(得分: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会检查它们。

答案 5 :(得分:1)

添加西德尼的回复。 过滤掉-type f并生成哈希码并不是非常必要的。 在回复zid​​arsk8时,您不需要排序,因为find与ls一样,默认按字母顺序对文件名进行排序。它也适用于空目录。

总结一下,前3个最佳答案是: (P.S.很好用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

答案 6 :(得分:0)

为所有文件制作校验和,例如使用md5sum。如果它们对于所有文件都是相同的并且没有文件丢失,那么一切都没问题。

答案 7 :(得分:0)

递归尝试diffing您的目录。如果其中一个目录中的内容有所不同,您将得到一个很好的摘要。

答案 8 :(得分:0)

  

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

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

/约翰

更新:好像@rjack用6秒的rsync答案打败了我: - )

答案 9 :(得分: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 ### arguement并将其输出到文件中,更容易在终端中解析和理解。