我想用它rsync
从服务器下载文件到我的本地计算机。这当然没问题:
$ rsync --progress -vr server-user@my-server:/path/to/remote/dir/ /local/dir/
receiving incremental file list
file1.txt
0 100% 10.00MB/s 0:01:00 (total: 0%) (xfer#1, to-check=n-1/n)
file2.txt
0 100% 10.00MB/s 0:01:00 (total: 1%) (xfer#2, to-check=n-2/n)
...
fileN.txt
0 100% 10.00MB/s 0:01:00 (total: 100%) (xfer#n, to-check=0/n)
虽然这在第一次下载时运行良好,但我注意到,当rsync
再次运行相同的命令时,现存的文件再次被重新下载,即使它们已经没有改变:
$ rsync --progress -vr server-user@my-server:/path/to/remote/dir/ /local/dir/
receiving incremental file list
...
fileN.txt
0 100% 50.00MB/s 0:0:10 (total: 100%) (xfer#n, to-check=1/n+1) // <-- fast re-download
newFile.txt
0 100% 10.00MB/s 0:1:00 (total: 100%) (xfer#n, to-check=0/n+1) // <-- new file
虽然重新下载现有文件比首次下载新文件要快得多,但仍然需要一些时间。这肯定比简单比较时间戳和大小所需的时间要多得多。此外,输出还显示下载进度。
那么,这里到底发生了什么?我以为rsync
会通过比较时间戳和文件大小(或使用选项时使用文件哈希-c
)自动检测现有文件并仅传输已更改和新的文件?
显然这里不是这种情况,因为在包含多个 1GB 以上文件的远程目录上重新运行该命令需要几分钟。因此这里传输了一些东西,但是什么呢?
添加该--ignore-existing
选项会停止重新下载现有文件,重新运行命令只需几秒钟。这表明,将远程文件与本地文件进行比较并不需要很长时间。但是,使用此选项并不能解决问题,因为它无法识别已更改文件不再...
长话短说:
如何使用 rsync 仅下载新的和更新的文件?
答案1
我已经找到了答案,并希望将问题保留在这里,以防有人遇到同样的问题:
只需添加-t
保留时间戳的选项即可。如果没有此参数,则目标文件将使用当前时间戳创建。这显然与服务器上的时间戳不同,因此更改检测不起作用。