很长一段时间以来,我一直使用 rsync 和 USB 电缆将手机 SD 卡中的照片传输到电脑上。这是当前命令:
rsync -azvu --ignore-existing --progress SD-Karte/DCIM/Camera/ /home/cardamom/Pictures/PhonePictures/
我花了一段时间通过反复试验和阅读文档才得到正确的结果。每个目录中可能有数千张照片,但人们不会认为计算机需要那么长时间来比较两个一千张长的列表,并且如果源中存在目标中没有的内容,请将其带过去。
然而,如果我用手机拍一张额外的照片,或者甚至没有额外的照片,它会在那里思考两到三分钟,然后在大约一秒钟内传输一张照片。
我不确定瓶颈是否在 rsync 命令中,该命令正在做一些我不需要的事情,例如比较文件的哈希值,或者它是否在旧智能手机的 SD 卡中,这在某种程度上效率低下。
rsync 命令是否有效率低下的地方,或者是否有某种措施可以使其在手机内运行得更快?
答案1
如果时间太长,可能是因为rsync
无法应用quick check
仅依赖于大小和时间的方法。
请注意,不同的文件系统以不同的方式存储时间,这意味着 rsync
存储的内容并不总是稍后检索的内容。
发生这种情况时,rsync
无法应用快速检查并转向校验和检查,这迫使它读取整个文件只是为了确保它是同一个文件,从而减慢整个传输速度。
ls -l --time-style=full-iso original_file
ls -l --time-style=full-iso already_synced_file
告诉你情况是否如此。如果是这样,您至少有两个选择,具体取决于它们的距离:
- 添加
--size-only
选项以仅检查尺寸而不检查时间。 - 使用该
--modify-window
选项来考虑这一点。
答案2
因此,以下内容似乎使我的照片同步运行得非常快 - 三秒而不是三分钟。我去掉了缩写,所以很清楚哪个是哪个:
time rsync --dry-run --verbose --compress --update --ignore-existing --recursive --group --times --progress --omit-dir-times --no-perms --modify-window=120 from/here/ /to/here/
当不再需要计时时,摆脱时间;当它似乎在做应该做的事情并且不会伤害任何东西时,摆脱空运行。
注意到在构建它时,命令中有相当多的加速器和刹车同时发生的情况,而 rsync 从未抱怨过。例如,-a
being -rlptgoD
,p 是for ,--perms
并且有一段时间我也在--no-perms
那里。
将继续观察试运行一段时间,并确保其继续正常运行。