scp 指令

scp 指令常用于完成远程服务器和本地主机,或远程服务器之间的复制操作。指令基于 ssh 协议,因此任何能够通过 ssh 连接的服务器都能够使用 scp 指令进行文件传输。

参数与指令格式为:

1
2
3
$ scp
usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program] source ... target

常见的使用场景:

  • 本地传输到远端:

    1
    scp myfile1 myfile2 user@1.1.1.1:/dir

    这种场景下可以使用通配符 * 来传输多个文件

  • 将远端文件拉取到本地

    1
    2
    scp user@1.1.1.1:/dir/file myfile
    scp user@1.1.1.1:/path/directory/\{foo.txt,bar.txt\} .

    注意: 当拉取多个远端文件时,文件和逗号之间不能有空格

  • 指定特殊端口

    部分服务器禁用了 22 端口,此时需要指定 ssh 使用的端口

    1
    scp -P 2200 ~/myfile user@1.1.1.1:/some/path/test.txt

使用注意

  • 如果进行文件夹传输,使用 -r 参数
  • scp 指令操作时会打开所有软连接,即复制之后不再包含软连接。如果想要保持软连接,需要使用 tar 打包之后传输再解包

cp 指令

cp 是 Linux 最基本的复制指令

cp 指令在执行时也会打开所有的软连接,如果想要保持软连接,需要使用 -R 参数,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# gry @ gry-MacBookPro in ~/Repos [0:31:57]
$ ll temp
total 0
lrwxr-xr-x 1 gry staff 11B Jan 9 00:27 softlink -> ../lines.sh

# gry @ gry-MacBookPro in ~/Repos [0:32:07]
$ cp -R temp temp2

# gry @ gry-MacBookPro in ~/Repos [0:32:16]
$ ll temp*
temp:
total 0
lrwxr-xr-x 1 gry staff 11B Jan 9 00:27 softlink -> ../lines.sh

temp2:
total 0
lrwxr-xr-x 1 gry staff 11B Jan 9 00:32 softlink -> ../lines.sh