如何在一个命令中通过 scp 复制多个文件?

Pet*_*mit 25 linux ssh scp

我必须将大量文件从一台 PC 传输到另一台(都是 Linux)。我想使用scp它,但一次scp只允许传输一个文件。

我怎样才能做到这一点?

我有

  • 无法使用 rsync 或任何其他协议
  • 不可能使用无密码证书(但有带密码的证书)
  • 要传输的文件列表和其他服务器上文件的目标路径列表
  • 文件分布在很多目录中,而不是我要复制的目录中的所有文件

如果可能,我想透明地 gzip 和 ungzip 以节省带宽!

这可能吗?

aki*_*ira 33

使用tar

tar cvzf - -T list_of_filenames | ssh hostname tar xzf -
Run Code Online (Sandbox Code Playgroud)

  • 下面是文件格式:“在c模式下,tar将从filename中读取要归档的名称。单独一行的特殊名称“-C”将导致当前目录更改为下一行指定的目录. 除非指定了--null,否则名称以换行符终止。注意--null 还禁用对包含“-C”的行的特殊处理。” (2认同)

Dav*_*ett 19

我想为此使用 scp,但 scp 一次只允许传输一个文件。

我很确定这不是真的,至少对于scp大多数 Linux 发行版中包含的 OpenSSH 提供的命令来说不是这样。

我使用scp file1 file2 ... fileN user@host:/destination/directory/相当频繁。

对于透明压缩,SSH 协议内置了此功能scp,如果您-C在命令行上提供该选项,则可以使用它。对于许多类似的小文件,您会发现 akira 建议的 tar+gz 选项可以获得更好的压缩效果,因为它可以利用此类文件之间的相似性,scp将每个文件压缩为单独的实体。我通常更喜欢使用 scp,因为它更容易恢复部分传输(或者,尽管我知道在这种情况下提问者没有选择)rsync因为这更容易恢复并共享整个 tar+gz 选项-流压缩优势。


Jim*_*man 5

不起作用scp -r yourdir otherhost:/otherdir

然后试试这个:

tar cfz - . | ssh otherhost "cd /mydir; tar xvzf -"
Run Code Online (Sandbox Code Playgroud)

ztar的-flag 进行压缩。或者您可以使用 -C 进行 ssh:

tar cf - . | ssh -C otherhost "cd /mydir; tar xvf -"
Run Code Online (Sandbox Code Playgroud)

  • @Nathan:-C 是让 ssh 进行压缩。 (2认同)