【发布时间】:2017-04-19 02:39:16
【问题描述】:
我正在尝试通过 ssh 快速传输数百到数千个小文件,方法是创建它们的 tar 存档并通过 ssh 传输它们。
我的本地系统正在运行 Linux Mint 18.1,而我的远程系统正在运行 Ubuntu 16.04 Server。
例如,假设我有目录
/var/www/testing
以及其中的几个文件和子文件夹。
/var/www/testing/subdir1/*
/var/www/testing/subdir2/*
/var/www/testing/file1
/var/www/testing/file2
/var/www/testing/file3
我想将所有这些文件传输给我自己。因为文件太多,ssh一个一个传输很慢,所以我正在创建一个存档并传输存档:
ssh user@domain "cd /var/www; tar zcvf - testing" | "tar zxvf -"
只要 tar 命令不被打断,就可以完美运行。如果 tar 被中断,第一个文件,在本例中为 file1,将被覆盖为部分存档,包括每个文件,直到它被中断的文件。
是我正在做的事情导致这种情况吗?如何避免这种情况,或者有更好的方法来快速传输大量文件?
【问题讨论】:
-
你看过
rsync吗?在传输整个文件之前,它不会覆盖目标文件。它也只会复制新的或已更改的文件,并且可以重新启动以从中断处继续。它适用于ssh。 -
您正在中断两个 tar 命令中的哪一个,您正在采取哪些步骤来导致中断?
-
我考虑过 rsync,但我目前的理解是 rsync 仍然一次处理一个文件,因此在第一次同步数千个文件时速度很慢。我将中断 create-archive tar 命令,主要是由于执行时间限制,并且远程系统的文件将被覆盖(因为尚未将任何内容传输到本地系统)。
-
如果
tar c覆盖了它的一个源文件,那就是一个错误。它不应该那样做。如果这是 GNU tar,请报告给bug-tar。 -
这似乎是正在发生的事情,并且在我身上发生过好几次。在提交错误报告之前,我会检查是否有人发布了它并进行更多测试以查看它覆盖的条件。
标签: linux ssh tar file-transfer