使用 scp 传输 .txt 文件列表

使用 scp 传输 .txt 文件列表

我在服务器 A 上有 160 万个文件,其中只有大约 2 万个需要传输到服务器 B。目标服务器 B 位于 GoDaddy 共享主机上,因此我几乎只能使用 scp 来同时传输多个文件。

我想通过 SQL 查询生成包含这 20k+ 个文件的 .txt 文件,然后将该列表输入 scp。有什么方法可以做到这一点吗?

cat /proc/version给我Linux version 2.6.32-531.23.3.lve1.2.65.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Aug 19 10:37:27 EDT 2014

答案1

如果你已经创建了文本文件,请执行以下操作

cat /location/file.txt | xargs -i scp {} user@server:/location

这将逐行执行 file.txt 的输出并每行运行 scp 命令;我希望这会有所帮助。

答案2

考虑同步作为替代方案,它内置了 ssh 支持,并支持使用以下方法读取文件列表--files-from

例子:

rsync -av --progress --partial-dir=/tmp --files-from=file_list.txt . [email protected]:/dest

相对于 scp 的优势:

也可以看看:

答案3

我想对文件夹列表执行相同操作,但使用的所有答案都xargs对我不起作用。最后我简单地解决了这个问题:

scp -r user@server:/location/{"$(cat folder_list.txt | tr '\n' ',' | sed 's/,$//')"} .

我将文件列表传递给 shell 扩展。我认为这对任何寻找替代解决方案的人都可能有帮助。

答案4

上述答案要求您对每个传输的文件进行身份验证。SCP 在 SSH 上运行,GoDaddy 提供对 SSH 上其他命令(如 tar)的访问。因此,最好的方法是通过以下方式将 tar 与 ssh 结合使用:

tar -T <file> -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

如果文件列表在 STDIN 上,您可以执行以下操作:笔记:cat 在这里仅用于生成 STDIN

cat <file> | tar -T - -cf - | ssh <user>@<host> "tar -C <dir> -xvf -"

为了以额外的处理时间为代价减少传输时间,您可以向两个 tar 命令添加 -z 或 -j 以分别启用 gzip 或 bzip 压缩。

相关内容