# Generate some data
dd iflag=fullblock bs=1M count=200 </dev/urandom >200M.dat
# See how long it takes to transfer
time rsync -av 200M.dat remote:
# See how long it takes to transfer "nothing"
time rsync -av 200M.dat remote:
# Generate one byte of data and prepend it to another data file
dd bs=1 count=1 </dev/urandom >1b.dat
cat 1b.dat 200M.dat >200M1b.dat
# Copy the new file across to the original target
time rsync -av 200M1b.dat remote:200M.dat
# Clean up
rm 1b.dat 200M.dat 200M1b.dat
ssh remote rm 200M.dat
根据您在评论中的建议(这确实应该在您的问题中),这似乎是您想要的
您需要足够的空间来存放
directory.tar
两侧。我被问到这个看似微不足道的解决方案是否可以在从 tar 文件的开头添加(或删除)少量(例如单个字节)的情况下工作。
希望这个示例能够说明
rsync
处理此类情况的能力。如果您有远程服务器的等效(证书密钥)登录名,则效果最好,这样就不会花时间输入密码。如果算法可以处理插入在数据流开头的单个字节,则传输应该只需要几分钟。如果不能,您会期望传输时间与第一次大致相似。
这是给你的另一个建议。我在 GitHub 上找到的该
hrsync
工具似乎非常适合在您重命名文件或在源代码树的目录之间移动文件时维护文件的内存。/usr/local/bin
确实有优势例子
我
bash
仅使用命令行实用程序找到了解决方案。可以优化解决方案:按大小升序对文件进行排序,并在每个块中放置尽可能多的小文件(这里是背包问题=),但这会过度设计):pack.bash
:unpack.bash
: