当前位置: 首页 > 科技观察

如何在使用scp命令时递归排除文件

时间:2023-03-14 22:55:23 科技观察

Q:我需要将所有包含*.c文件的文件夹从名为hostA的本地笔记本复制到hostB。我正在使用以下scp命令,但不知道如何排除特定文件(如*.out):$scp-r~/projects/user@hostB:/home/delta/projects/排除特定文件或目录从Unix命令行?可以使用scp命令在网络主机之间安全地复制文件。它使用ssh进行数据传输和身份验证。典型的语法是:scpfile1user@host:/path/to/dest/scp-r/path/to/source/user@host:/path/to/dest/scpExcludefiles我不认为你可以使用scp订购时过滤或排除文件。但是,有一个很好的解决方法来排除文件并使用ssh安全地复制它。本页介绍了在使用scp递归复制目录时如何过滤或排除文件。如何使用rsync命令排除文件语法是:rsyncav-essh--exclude='*.out'/path/to/source/user@hostB:/path/to/dest/这里:-a:递归到目录,即复制所有文件和子目录。此外,打开存档模式和所有其他选项(相当于-rlptgoD)-v:详细输出-essh:使用ssh作为远程shell,所以一切都被加密--exclude='*.out':排除匹配的模式文件,例如作为*.out或*.c等。rsync命令示例在这个示例中,递归地复制~/virt/目录中的所有文件,但排除所有*.new文件:$rsync-av-essh--exclude='*.new'~/virt/root@centos7:/tmp示例输出:Scp排除文件但使用rsync排除命令如果在远程服务器上找不到rsync,则rsync命令将失败。在这种情况下,尝试以下scp命令,它在当前目录中使用bashshell模式匹配(它不能与-r选项一起使用):$ls示例输出:centos71.logcentos71.qcow2centos71.qcow2。newcentos71.v2.qcow2.newmeta-datauser-data复制当前目录中除.new之外的所有内容:$shopt-sextglob$scp!(*.new)root@centos7:/tmp/示例输出:centos71.log100%42621.3MB/s00:00centos71.qcow2100%836MB32.7MB/s00:25元数据100%4718.5KB/s00:00用户数据100%1543569.7KB/s00:00更多信息,请参阅以下手册页:$manrsync$manbash$manscp