递归使用scp命令时如何排除文件
时间:2020-01-09 10:43:33 来源:igfitidea点击:
如何将所有.c文件从名为hostA的本地便携式计算机复制到包括所有目录的hostB。
我正在使用以下scp命令,但不知道如何排除特定文件:$scp -r~/projects/user @ hostB:/home/delta/projects /
scp命令在Linux/Unix命令行中排除特定文件或者目录?
可以使用scp命令在网络上的主机之间安全地复制文件。
它使用ssh进行数据传输和身份验证。
典型的scp命令语法如下:
scp file1 user@host:/path/to/dest/ scp -r /path/to/source/ user@host:/path/to/dest/ scp [options] /dir/to/source/ user@host:/dir/to/dest/
Scp排除文件语法和替代方法
我不认为您可以在使用scp命令时过滤或者排除文件。
但是,有一个很好的解决方法,可以排除文件并使用ssh安全地复制文件。
本教程说明使用scp递归复制目录时如何过滤或者排除文件。
如何使用rsync命令排除文件
语法为:
rsync -av -e ssh --exclude='*.out' /path/to/source/ user@hostB:/path/to/dest/
其中:
- -a:递归到目录中,即复制所有文件和子目录。另外,打开存档模式和所有其他选项(-rlptgoD)
- -v:详细输出
-e ssh
:对远程shell使用ssh,以便对所有内容进行加密- --exclude ='*。out':排除匹配PATTERN的文件,例如*.out或者*.c等。
rsync命令的示例
在此示例中,从~/virt /目录递归复制所有文件,但排除所有.new文件:
$ rsync -av -e ssh --exclude='*.new' ~/virt/ root@centos7:/tmp
scp使用extglob bash选项排除文件
如果在远程服务器上找不到rsync,则rsync命令将失败。
在这种情况下,请尝试使用以下在当前目录中使用bash shell模式匹配的scp命令(它将与-r
选项一起使用):
$ ls
输出示例:
centos71.log centos71.qcow2 centos71.qcow2.new centos71.v2.qcow2.new meta-data user-data
复制当前目录中除.new文件之外的所有文件:
$ shopt -s extglob $ scp !(*.new) root@centos7:/tmp/
输出示例:
centos71.log 100% 4262 1.3MB/s 00:00 centos71.qcow2 100% 836MB 32.7MB/s 00:25 meta-data 100% 47 18.5KB/s 00:00 user-data 100% 1543 569.7KB/s 00:00
了解extglob shell选项以使用scp和rsync排除文件
如果使用shopt命令(内置)启用了extglob
bash shell选项,Linux系统将识别出以下几种扩展模式匹配运算符:
操作员 | 描述 |
---|---|
?(pattern-list) | 匹配零个或者一次出现的给定模式 |
\ *(pattern-list) | 匹配给定模式的零次或者多次出现 |
+(模式列表) | 匹配给定模式的一次或者多次出现 |
@(pattern-list) | 匹配给定的模式之一 |
!(pattern-list) | 匹配给定模式之一之外的任何内容 |