今天碰到一个小问题,scp从远端复制目录时,与期望结果不符; 恰好在之后一个同事将远端目录误删,导致数据丢失,只得重新生产数据,浪费几个小时。
这个scp的问题以前没有留意过,觉得有必要记录下。
问题记录
有一台远程机器remote_host
,其上有一个目录~/testscp
, 其目录结构如下:
1 | testscp |
出问题的scp命令是远端目录带*号时:
1 | scp -r remote_host:~/testscp/* testscp |
问题表现:
- 若本地testscp目录存在,则scp拷贝一切正常,完整的文件和目录结构会被拷贝到本地
- 若本地testscp不存在,则其会创建testscp目录, 但是拷贝结果中只有一个info.txt,多个子目录中的相同的文件被覆盖到一个位置。
- 反过来,若将本地目录拷贝到远端:
scp -r testscp/* remote_host:~/testscp
, 则会明确要求远端目录存在,否则给出错误提示。
正确的用法:
1 | mkdir testscp |
相关问题
scp -r
不带*号时,其表现也值得留意,比如:
1 | scp -r remote_host:~/testscp testscp |
其表现为:
- 若本地testscp目录不存在,则将远端testscp整个拷贝到当前目录中。
- 若本地当前目录存在testscp, 则将远端testscp拷贝到本地testscp中,即本地生成testscp/testscp目录。
作为对比,cp命令的表现就简单多了,其要求目标目录必须存在,所以就不存在以上问题。