Bash 如何比较重复目录之间的文件大小匹配?
我需要比较两个目录来验证备份 假设我的目录如下所示:Bash 如何比较重复目录之间的文件大小匹配?,bash,shell,backup,rsync,scp,Bash,Shell,Backup,Rsync,Scp,我需要比较两个目录来验证备份 假设我的目录如下所示: Filename Filesize Filename Filesize user@main_server:~/mydir/ user@backup_server:~/mydir/ file1000.txt 4182410737 file1000.txt 4182410737 file1001.txt 8241410737 -
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
(目标是指示备份脚本重新蚀刻这些文件)
我试图得到以下的变化,但没有用
[main_server] $ rsync -n ~/mydir/ user@backup_server:~/mydir
我无法执行
rsync
来备份目录本身,因为它需要太长的时间(8-24小时)。相反,我运行多个scp
线程来批量获取文件。这将定期完成默认情况下,rsync使用快速检查方法,仅传输大小不同或上次修改时间不同的文件。当您报告大小不变时,这似乎表明时间戳不同。实现这一点的两个选项是:
- 使用
在传输文件时保留时间戳-p
- 使用
忽略时间戳并仅传输大小不同的文件--size only
rsync
应该比SCP
@John1024快得多,谢谢。我刚刚在一个测试中尝试了这个方法:备份100个1GB的文件(用urandom填充)。我先把它们翻过来。确认所有100个文件都存在,并且文件大小正确。然后我运行了rsync-Sa~/source/~/destination
,看到所有100个文件再次同步,这次是通过rsync
。这些不是你说的“部分拷贝”。它们是相同的副本,通过scp
从一台服务器发送到另一台服务器。我错过了什么?第一个scp
花了4m44s。rsync(在所有文件都被scp接收后)花费了16m12s。我希望scp
默认采用@Ryan,rsync
使用快速检查方法,只传输大小不同或上次修改时间不同的文件。什么是源文件系统和目标文件系统(ext4、ntfs等)?或者,有什么东西会影响源或目标上的时间戳吗?@John1024,谢谢!这正是正确的方向。我添加了-p
以保留时间。文件大小相同,但时间不同。不再是了rsync
在scp
中保存时间后立即运行。如果你想在回答中提出这一点,我很乐意奖励你的意见。
[main_server] $ rsync -n ~/mydir/ user@backup_server:~/mydir
# 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