关于shell:如何使用scp将文件夹从远程复制到本地?

How to copy a folder from remote to local using scp?

如何使用scp将文件夹从远程复制到本地主机?

我使用ssh登录我的服务器。然后,我想把远程文件夹foo复制到本地/home/user/Desktop

如何做到这一点?


1
scp -r [email protected]:/path/to/foo /home/user/Desktop/

来自man scp(见在线手册)

-r Recursively copy entire directories


要使用SCP的全部功能,您需要执行以下步骤:

  • 公钥授权
  • 创建ssh别名
  • 然后,例如,如果您有这个~/.ssh/config:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Host test
        User testuser
        HostName test-site.com
        Port 22022

    Host prod
        User produser
        HostName production-site.com
        Port 22022

    您将从密码输入中保存自己并简化SCP语法,如下所示:

    1
    2
    scp -r prod:/path/foo /home/user/Desktop   # copy to local
    scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

    此外,您还可以使用远程路径完成:

    1
    2
    scp test:/var/log/  # press tab twice
    Display all 151 possibilities? (y or n)

    更新:

    要启用远程bash完成,您需要在主机上都有bash shell,并正确地工作bash完成。有关更多信息,请参阅相关问题:

    如何在使用SCP时为远程路径启用自动完成功能?SCP文件名选项卡完成


    将所有内容从本地位置复制到远程位置(上载)

    1
    scp -r /path/from/destination username@hostname:/path/to/destination

    将所有内容从远程位置复制到本地位置(下载)

    1
    scp -r username@hostname:/path/from/destination /path/to/destination

    自定义端口,其中xxxx是自定义端口号

    1
     scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

    在当前目录上从远程复制到本地

    1
    scp -r username@hostname:/path/from/file .

    帮助:

  • -r递归复制所有目录和文件
  • 始终使用来自/的完整位置,由pwd获取完整位置。
  • scp将替换所有现有文件
  • hostname将是主机名或IP地址。
  • 如果需要自定义端口(除了端口22),使用-P portnumber
  • . (dot)-它是指当前的工作目录,所以只能从服务器下载/复制并粘贴到这里。
  • 注意:有时由于防火墙中不允许使用该端口,自定义端口将无法工作,因此请确保防火墙中允许使用自定义端口进行传入和传出连接。


    我经常使用的是:

    1
    scp -r username@IP:/path/to/server/source/folder/  .

    . (dot):表示current folder。所以从服务器复制并粘贴到这里。

    IP:可以是像125.55.41.311这样的IP地址,也可以是像ns1.mysite.com那样的主机。


    最好先压缩远程服务器上的目录:

    1
    tar czfP backup.tar.gz /path/to/catalog

    其次,从远程下载:

    1
    scp [email protected]:/path/to/backup.tar.gz .

    最后,提取文件:

    1
    tar -xzvf backup.tar.gz


    如果您有一个地狱般的文件要从远程位置下载,如果您不太关心安全性,请尝试将SCP默认加密(三重DES)更改为类似"Blowfish"。

    这将大大减少文件复制时间。

    1
    scp -c blowfish -r [email protected]:/path/to/foo /home/user/Desktop/


    转到Unity工具栏上的文件

    enter image description here

    按ctrl+l在这里写下"你的用户"[email protected]

    192.168.1.103是要连接的主机。

    这里有一个例子

    enter image description here


    典型场景,

    1
    scp -r -P port username@ip:/path-to-folder  .

    用样本解释,

    scp -r -P 27000 [email protected]:/tmp/hotel_dump .

    在哪里?

    1
    2
    3
    4
    port = 27000
    username ="abc" , remote server username
    path-to-folder = tmp/hotel_dump
    . = current local directory

    如果遇到"太多身份验证失败",请指定已添加到服务器ssh服务器的确切ssh密钥:

    1
    scp -r -i /path/to/local/key [email protected]:/path/to/folder /your/local/target/dir

    问题是如何使用scp命令将文件夹从远程复制到本地。

    $ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

    但是,这里有更好的方法来使用sftp–ssh文件传输协议(也称为安全文件传输协议,或sftp)是一种网络协议,它提供文件访问、文件传输和任何可靠数据流上的文件管理(维基百科)。

    $ sftp user_remote@remote_ip

    sftp> cd /path/to/remoteDir

    sftp> get -r remoteDir

    Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

    要获得有关sftp命令的帮助,只需键入help?


    我不知道为什么,但我必须在源服务器指令之前使用本地文件夹。使它工作

    1
    scp -r . [email protected]:/usr/share/nginx/www/example.org