使用scp命令在linux主机之间复制文件/文件夹

在linux主机之间复制文件或文件夹是一个经常会遇到的操作,通常可以用ftp或sftp命令来传输文件,但是如果要传输文件夹,或者在两台remote主机之间传输文件,这两个命令就显得不够给力了。

scp是一个专门用来在linux主机之间传输文件的命令,它是基于ssh协议进行数据传输的,而且他可以直接传输文件夹,并且除了可以进行local和remote主机之间的文件之外,还可以实现两台remote主机之间的文件传输。

scp 命令的基本使用格式

1
2
scp [-12346BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port]
[-S program] [[user@]host1:]file1 ... [[user@]host2:]file2

先不考虑前面的可选参数,常用的方式如下

1
scp [[user@]host1:]file1 [[user@]host2:]file2

这里的user就是主机上的用户名称,因为是用ssh协议连接主机,所以格式是user@host这种形式。

例如,要将本地的一个文件复制到remote主机上,命令使用方式如下:

1
scp /home/zhangsan/this-is-source-file.tar.gz zhangsan@192.168.1.110:/data/uploads/this-is-target-file.tar.gz

参数说明

  • -1 : 强制使用协议1。

  • -2 : 强制使用协议2.

  • -3 : 两台远程主机之间的文件复制通过本地主机中转。在不加该参数的情况下两台远程主机之间是直接进行数据传输的,且不会有进度指示。

  • -4 : 强制使用IPv4协议。

  • -6 : 强制使用IPv6协议。

  • -B : 批量模式 (不提示输入用户名和密码)。

  • -C : 启用数据压缩。

  • -c cipher : 选择数据传输加密算法。

  • -F ssh_config : 指定一个替代的ssh用户配置文件。

  • -i identity_file : 指定认证公钥文件。

  • -l limit : 限制用户带宽。

  • -o ssh_option : 直接传入ssh配置项,格式同ssh_config使用的格式。

  • -P port : 如果修改了ssh的默认端口,使用该参数指定端口。

  • -p : 保留源文件的修改时间、访问时间以及模式属性。

  • -q : 静默模式。禁用了进度指示以及警告等信息。

  • -r : 递归复制整个目录。

  • -v : 详尽模式。打印debug信息。

更多例子

复制remote主机上的一个文件夹到本地:

1
scp -r zhangsan@192.168.1.110:/home/public/sample/ /home/zhangsan/newdir

在两台remote主机之间复制文件:

1
scp 192.168.1.88:/root/something.tar.gz lisi@192.168.1.99:/home/lisi/

由于192.168.1.88没有指定用户,所以将会提示输入root密码访问主机。

通过本地主机中转,在两台remote主机之间复制文件夹:

1
scp -3 -r zhangsan@192.168.1.88:/home/zhangsan/docs/ lisi@192.168.1.99:/home/lisi/docs/