【问题标题】:SCP files matching pattern using Perl使用 Perl 匹配模式的 SCP 文件
【发布时间】:2016-11-02 03:56:31
【问题描述】:

有没有办法使用 Perl scp 匹配通配符模式的多个文件?

说服务器 A 的 curr 目录包含 .pdf 和 .txt 文件,我只想将 .pdf 文件移动到 /home/userid 下的服务器 B 我使用了 Net::SCP,但我看到没有像普通 scp 命令那样的批量复制,例如。 scp *.pdf userid@serverB

>cat test.pl
use Net::SCP;
$scp = Net::SCP->new( "serverB", "userid" );
$scp->put("test.pdf") or die $scp->{errstr};

我想换成 $scp->put("*.pdf") 或者死 $scp->{errstr};如果我更改为 *.pdf perl 会抛出错误

*.pdf: 没有这样的文件或目录

我已经创建了无密码登录。有没有办法批量复制匹配的模式文件?

【问题讨论】:

    标签: perl scp


    【解决方案1】:

    使用Net::OpenSSH:

    use Net::OpenSSH;
    my $ssh = Net::OpenSSH->new('serverB', user => 'userid');
    $ssh->scp_put({glob => 1}, '*.pdf', '.') or die $ssh->error;
    

    或者,如果您在 Windows 中运行该脚本,Net::SSH::Any 提供相同的界面:

    use Net::SSH::Any;
    my $ssh = Net::SSH::Any->new('serverB', user => 'userid');
    $ssh->scp_put({glob => 1}, '*.pdf', '.') or die $ssh->error;
    

    【讨论】:

      【解决方案2】:

      * 字符是一个通配符,由你的 shell 扩展(不同的 shell 可能有不同的扩展规则),所以 SSH(或 SCP)对此一无所知。

      此外,SSH 没有“集成”支持在目录中列出文件。 如果你想列出文件,你必须要么走“丑陋的方式”,通过远程ls *.pdf(通过使用Net::SSH::Perl),或者切换到不同的东西,比如Net::SFTP,它支持@ 987654325@函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-27
        • 1970-01-01
        相关资源
        最近更新 更多