将批量(1百万+)个文件从一个服务器移动到另一个服务器 - “参数太多”

时间:2014-01-26 22:32:08

标签: ubuntu gzip rsync tar scp

我需要将大量文件从一台服务器移动到另一台服务器。所有文件都是图像,相当小,但总共10GB +。

我试图使用tar和gzip,但由于“参数太多”而失败了。

如何解决“太多争论”问题?

或许还有另一种方式 - SCP或rsync可以这样做吗?

这两个框都是Ubuntu。

修改

以下似乎只是挂起而没有任何反应,在命令退出后,images.tar.gz文件的大小为零。

tar -zcvf images.tar.gz images

2 个答案:

答案 0 :(得分:1)

尝试cpio,它会从stdin读取文件列表。您可以通过ssh

管道输出
find images -print0 | cpio -o0x ustar | ssh user@host cpio -i

或使用压缩

find images -print0 | cpio -o0x ustar | gzip | ssh user@host 'gunzip  | cpio -i'

更新

实际上这个答案是行不通的,因为GNU cpio只实现了有限大小的存档格式。答案已更新为使用ustar格式,该格式超过默认值的2 GiB限制,但仍然只有8 GiB。 Mark Addler的tar答案可能是获取大量数据的最佳方式。

答案 1 :(得分:1)

-T -将从stdin读取文件名。所以你可以这样做:

find . -name \*.jpg -print0 | tar -zcvf images.tar.gz --null -T -

但是我会建议使用rsync,正如我在评论中所说的那样。

如评论中所述,print0使用空值('\ 0')来终止文件名,并使用--null来使用tar,以便接受更多通用文件名和空格其他终结者。