智传网优云课堂,专注分享IT技术
与IT技术爱好者一起共同学习进步

scp复制文件时排除指定文件

1. 前言

本文主要讲解如何在scp复制文件时排除指定文件。
举例:
我需要将所有*.c文件从名为hostA的电脑复制到hostB,包括所有目录。我使用以下scp命令,但不知道如何排除特定的文件(如*.out):

scp -r ~/projects/ user@hostB:/home/123/

如何告诉scp命令在Linux/Unix复制文件时排除指定的文件或目录呢?

可以使用scp命令在网络上的主机之间安全地复制文件。它使用ssh进行数据传输和身份验证。典型的scp命令语法如下:

scp file1 user@host:/path/to/test/
scp -r /path/to/source/ user@host:/path/to/test/
scp [options] /dir/to/source/ user@host:/dir/to/test/

2. scp复制文件时排除指定文件

scp复制文件时排除指定文件
我不认为您可以在使用scp命令复制文件时可以过滤或排除文件。但是,有一个很好的解决方案可以排除文件并使用ssh安全地复制它。本教程解释如何在使用scp递归复制目录时过滤或排除指定文件。

如何使用rsync命令排除文件
它的语法是:

rsync -av -e ssh --exclude='*.out' /path/to/source/ user@hostB:/path/to/test/

解释一下上面的命令:

-a : 递归到目录,即复制所有文件和子目录。此外,打开存档模式和所有其他选项 (-rlptgoD)
-v : 详细输出
-e ssh : 使用ssh作为远程shell,以便对所有内容进行加密
--exclude=’.out’ : 排除匹配模式的文件,例如。out或*.c等等.

rsync命令的例子
在本例中,从~/virt/目录递归复制所有文件,但排除所有*.新文件:

rsync -av -e ssh --exclude='*.new' ~/virt/ root@centos7:/tmp

从~/virt/目录递归复制所有文件,但排除指定文件

如果在远程服务器上没有找到Rsync,则Rsync命令将失败。在这种情况下,尝试下面的scp命令,它在当前目录中使用bash shell模式匹配(它不会与-r选项一起工作):

ls

输出结果:
access.log-20190218 access.log-20190727 logip.new

复制当前目录中除.new文件外的所有内容:

shopt -s extglob
scp !(*.new) root@centos7:/tmp/

输出结果:
access.log-20190218 100% 4262 1.3MB/s 00:00
access.log-20190727 100% 836MB 32.7MB/s 00:25

3. 理解extglob shell选项来排除使用scp和rsync的文件

如果使用shopt命令(build tin)启用extglob bash shell选项,Linux系统可以识别几个扩展的模式匹配操作符,如下所示:

Operators Description
?(pattern-list) 匹配给定模式的零次或一次出现
*(pattern-list) 匹配给定模式的零次或多次出现
+(pattern-list) 匹配给定模式的一个或多个匹配项
@(pattern-list) 匹配给定的模式之一
!(pattern-list) 匹配除给定模式之一之外的任何内容

使用scp命令复制文件时怎么才能排除指定文件?

4. 总结

本教程向您展示了如何在Linux或类unix操作系统下的网络上的主机之间使用scp或者rsync命令复制文件时排除指定的文件。有关更多信息,请参阅以下手册页:

man 1 rsync
man bash
man 1 scp
赞(0)
未经允许不得转载:Linux入门学习到精通 » scp复制文件时排除指定文件
分享到: 更多 (0)

学习QQ群:557371664

关注微信公众号自助视频学习

评论 抢沙发

评论前必须登录!