我将把大量数据 (30GB) 移动到服务器,该服务器被分成多个 200MB tar.gz 文件。这需要时间,在此过程中我需要停止并重新启动计算机,从而中断传输。
我想做的是以下内容:
find . -maxdepth 1 -type f -iname "*.tar.gz.*" | while read file ; do
scp "$file" username@host:/backup/
mv "$file" "already-done/"
done
不幸的是,我无法将 SSH 密钥复制到此框中,因为它是我无法控制的非标准设置,因此每次创建连接时我都需要手动输入密码,这使得上面的 while 循环没有生产力。有没有办法让我使用 rsync 通过单个持久 SSH 连接将文件复制到此服务器,同时将完成的备份移动到另一个目录,这样我就不会在全新启动时再次复制它们?
答案1
我有两个建议:
- 将对 scp 的调用替换为对 rsync 的调用,rsync 旨在处理此类情况。
- 无需使用 while 循环,只需使用 glob 直接调用文件即可。由于您的 find 命令使用的最大深度为 1,因此您可以执行
rsync -t *.tar.gz.* username@host:/backup/
. Rsync 将负责检查哪些文件已被复制、哪些文件尚未复制以及这些文件的准确性。它只会通过连接发送任何更改。