如何比较重复目录之间的文件大小匹配?

How can I compare the file sizes match between duplicate directories?

我需要比较两个目录来验证备份。

假设我的目录如下所示:

Filename        Filesize      Filename        Filesize
user@main_server:~/mydir/     user@backup_server:~/mydir/
file1000.txt    4182410737    file1000.txt    4182410737
file1001.txt    8241410737    -                          <-- missing on backup_server!
...                           ...
file9999.txt    2410418737    file9999.txt    1111111111 <-- size != main_server

有没有一种快速的衬垫可以让我接近输出:

Invalid Backup Files:
file1001.txt
file9999.txt

(目的是指示备份脚本重新获取这些文件)

我尝试获取以下内容的变体,但无济于事。

[main_server] $ rsync -n ~/mydir/ user@backup_server:~/mydir

我无法 rsync 备份目录本身,因为它花费的时间太长(8-24 小时)。相反,我 运行 scp 的多个线程来批量获取文件。这定期完成 <1 小时。但是,偶尔我会发现一些文件不知何故丢失了(可能是连接断开)。

速度优先,所以文件大小应该足够。但我愿意包含一个 checksum,只要它不会像我在 rsync.

中发现的那样减慢进程

这是我的测试过程:

# Generate Large Files (1GB)
for i in {1..100}; do head -c 1073741824 </dev/urandom >foo-$i ; done

# SCP them from src to dest
for i in {1..100}; do ( scp ~/mydir/foo-$i user@backup_server:~/mydir/ & ) ; sleep 0.1 ; done

# Confirm destination has everything from source
# This is the point of the question. I've tried:

rsync -Sa ~/mydir/ user@backup_server:~/mydir
# Way too slow

你有什么建议?

默认情况下,rsync 使用快速检查 方法,它只传输大小或最后修改时间不同的文件。当您报告大小没有变化时,这似乎表明时间戳不同。处理此问题的两个选项是:

  • 传输文件时使用-p保留时间戳。

  • 使用--size-only忽略时间戳并仅传输大小不同的文件。