Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用scp同时复制多个文件_Linux_Scp - Fatal编程技术网

Linux 如何使用scp同时复制多个文件

Linux 如何使用scp同时复制多个文件,linux,scp,Linux,Scp,我想同时复制多个文件,以加快我目前使用的进程 scp -r root@xxx.xxx.xx.xx:/var/www/example/example.example.com . 但它一次只复制一个文件。我有一根100 Mbps的光纤,所以我有足够的带宽同时进行大量复制,请帮助。100位以太网实际上相当慢。理论上可以预期8个MiB/s。实际上,通常最多只能得到4-6个MiB/s 也就是说,如果并行运行多个会话,则不会看到速度的提高。您可以自己尝试,只需运行两个并行SCP会话,复制两个大文件。我猜你

我想同时复制多个文件,以加快我目前使用的进程

scp -r root@xxx.xxx.xx.xx:/var/www/example/example.example.com .

但它一次只复制一个文件。我有一根100 Mbps的光纤,所以我有足够的带宽同时进行大量复制,请帮助。

100位以太网实际上相当慢。理论上可以预期8个MiB/s。实际上,通常最多只能得到4-6个MiB/s

也就是说,如果并行运行多个会话,则不会看到速度的提高。您可以自己尝试,只需运行两个并行SCP会话,复制两个大文件。我猜你不会看到明显的加速。原因如下:

  • 两台计算机之间网络路径上最慢的组件决定了最大速度
  • 其他人可能会同时访问example.com,从而减少它可以为您提供的带宽
  • 100mbit以太网要求两个连续网络数据包之间有相当大的间隔。千兆以太网在这方面要好得多
  • 解决方案:

  • 在通过导线发送数据之前压缩数据
  • 使用类似于
    rsync
    (在引擎盖下使用SSH)的工具复制自上次运行命令以来已更改的文件
  • 创建大量小文件需要大量时间。尝试在远程端创建所有文件的存档,并将其作为单个存档发送
  • 最后一个建议可以这样做:

    ssh root@xxx "cd /var/www/example ; tar cf - example.example.com" > example.com.tar
    
    或通过压缩:

    ssh root@xxx "cd /var/www/example ; tar czf - example.example.com" > example.com.tar.gz
    

    注意:
    bzip2
    压缩效果更好,但速度较慢。这就是为什么我对这样的任务使用
    gzip
    z
    )。

    如果指定多个文件,scp将按顺序下载它们:

    scp -r root@xxx.xxx.xx.xx:/var/www/example/file1 root@xxx.xxx.xx.xx:/var/www/example/file2 .
    
    或者,如果您希望并行下载文件,那么可以使用多个scp调用,将每个调用放在后台

    #! /usr/bin/env bash
    scp root@xxx.xxx.xx.xx:/var/www/example/file1 . &
    scp root@xxx.xxx.xx.xx:/var/www/example/file2 . &
    

    SSH能够进行所谓的“多路复用”——通过一个(到一台服务器)进行更多连接。这可能是你买得起你想要的东西的一种方式。查找诸如“ControlMaster”之类的关键字

    第二种方法是使用更多连接,然后在后台发送每个作业:

    for file in file1 file2 file3 ; do 
         scp $file server:/tmp/ & 
    done
    
    但是,这就是你问题的答案——“如何同时复制多个文件”。为了提高速度,您可以使用较弱的加密(rc4等),也不要忘记,瓶颈可能是您的硬盘驱动器,因为SCP不会隐式限制传输速度


    最后一件事是使用rsync-在某些情况下,它可以比scp快得多…

    我不确定这是否对您有帮助,但我通常会在源位置存档(不需要压缩。只需存档就足够了)文件,下载并提取它们。这将大大加快这一进程。 在存档之前,下载1GB需要超过8小时 存档后,执行相同的操作花费了<8分钟

    您可以使用并行scp(也称为pscp):

    使用此工具,您可以同时将一个或多个文件复制到多个主机


    关于,

    您可以将后台任务与wait命令一起使用。 Wait命令确保在处理下一行之前完成所有后台任务。i、 e echo将在所有三个节点的scp完成后执行

    #!/bin/bash
    scp -i anuruddha.pem myfile1.tar centos@192.168.30.79:/tmp &
    scp -i anuruddha.pem myfile2.tar centos@192.168.30.80:/tmp &
    scp -i anuruddha.pem myfile.tar centos@192.168.30.81:/tmp &
    
    wait
    echo "SCP completed"
    

    什么是“100毫克纤维”?100mbit以太网?还是10 GBit以太网?编写脚本!。在每个命令的末尾放置一个
    &
    ,将其发送到后台或查看gnuparallel@AaronDigulla对不起,我是故意的Ethernet@FredrikPihl我不确定我是否理解你的意思,请你详细说明一下好吗?在我的场景中,它不是很大的文件,大约有10000个图像,每个都在30-60kb之间,所以,如果我是正确的,一次至少下载10个不会减慢我的连接速度?我从服务器上没有一个大于100kb的图像或文件。另外,当我运行两个SCP会话时,下载相同的文件并相互覆盖。我知道这是一个相当老的问题,但正如@Philip所建议的,传输速度与可用带宽无关,一个简单的tar将使速度提高很多倍,数据量和使用的带宽将相同(ish),但是传输速度会很快。S,你说的是100%正确的,但是我不只是试图一次访问几个大文件。我正在尝试总共下载大约10000个小图像,最好的方法是创建一个存档(tar),也许压缩它(gzip),然后传输并执行反向操作。谢谢你,迈克,我认为这是最好的解决方案。非常感谢你!最快的方法是类似于
    ssh source.machine“tar czpf-/lot/of/data”| tar xzpf--C/tmp
    @rogerdpack:Hi,查看提供简短细节作为答案以及链接这只会将同一文件复制多次