我需要将大量文件从一台 PC 传输到另一台 PC(两台都是 Linux)。我想使用scp
它,但scp
每次只能传输一个文件。
我怎样才能做到这一点?
我有
- 无法使用 rsync 或任何其他协议
- 无法使用无密码证书(但有带密码的证书)
- 要传输的文件列表以及另一台服务器上文件的目标路径列表
- 这些文件分散在很多目录中,并不是我想要复制的目录中的所有文件
如果可能的话,我愿意透明地使用 gzip 和 ungzip 来节省带宽!
这可能吗?
答案1
使用tar
:
tar cvzf - -T list_of_filenames | ssh hostname tar xzf -
答案2
我想使用 scp 来实现这一点,但是 scp 一次只允许传输一个文件。
我非常确定这不是真的,至少对于scp
大多数 Linux 发行版中包含的 OpenSSH 提供的命令来说不是这样的。
我使用得scp file1 file2 ... fileN user@host:/destination/directory/
相当频繁。
对于透明压缩,SSH 协议已内置此功能,如果您在命令行中scp
提供选项,则可以使用它。对于许多类似的小文件,您会发现 akira 建议的 tar+gz 选项可以获得更好的压缩效果,因为它可以利用这些文件之间的相似性,将每个文件压缩为单独的实体。不过,我通常更喜欢使用 scp,因为它更容易恢复部分传输(或者,虽然我知道在这种情况下提问者没有这个选项),因为它不仅更容易恢复,而且共享 tar+gz 选项的全流压缩优势。-C
scp
rsync
答案3
不起作用scp -r yourdir otherhost:/otherdir
?
那么尝试一下这个:
tar cfz - . | ssh otherhost "cd /mydir; tar xvzf -"
tar 的-flagz
可以进行压缩。或者,您也可以使用 ssh 的 -C:
tar cf - . | ssh -C otherhost "cd /mydir; tar xvf -"
答案4
scp
您实际上可以使用以下协议提供文件列表,
scp <user>@<host>:{<file1>,<file2>,...,<fileN>} <destination>
请注意,文件列表用法语括号括起来。
奖励:如果你想从相同的目录、使用、
scp <user>@<host>:<source>{<file1>,<file2>,...,<fileN>} <destination>