我正在尝试通过ssh快速传输数百到数千个小文件,方法是创建它们的tar存档并通过ssh传输它们。
我的本地系统运行的是LinuxMint18.1,我的远程系统运行的是Ubuntu16.04服务器。
例如,假设我有目录

/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应该是一个很好的工具。
如果你想继续使用tar来完成任务,并且你的目标机器的驱动器上有足够的空间,那么你可以先复制整个文件,并且只有在整个文件被传输之后才能将其解压。比如:
ssh user@domain "cd /var/www; tar zcvf - testing" | cat >/tmp/testing.tgz && tar xzvf /testing.tgz && rm -f /tmp/testing.tgz
可能还需要对tar使用p标志来保留权限。

关于linux - 如果tar被中断,它将覆盖其操作的第一个文件。有什么办法可以防止这种情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43479448/

10-14 16:05
查看更多