linux - 如果 tar 被中断,它会覆盖它操作的第一个文件。有什么办法可以防止这种情况发生吗?

标签 linux ssh tar file-transfer

我正在尝试通过 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 应该是一个很好的工具。

如果您想继续使用 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/

相关文章:

git - 通过 "IP"端口 22 和 client_loop : send disconnect: Broken pipe on cloning a repo from bitbucket 重置连接

linux - tar -czf 的结果

docker - 在 Mac 上的 Docker 中,带有符号链接(symbolic link)的 tarball 上的 `tar -zxvf` 失败(tar : Cannot utime: No such file or directory)

python - 无法将函数并行映射到 tarfile 成员

macos - rsub with sublime 和 ssh 连接被拒绝

linux - 将终端输出重定向到文件

MySQL:如何删除一列匹配但一列设置为 "-1"的所有行?

linux - 什么进程正在使用我所有的磁盘 IO

sql - 如何从teamcity代理上的gradle脚本运行sql文件(具有多个查询和注释)

docker - 由于发生权限被拒绝,无法 ssh 到 docker(ubuntu :19. 04)