有没有一种方法可以使用Perl实现与通配符模式匹配的scp多个文件?
假设服务器A有包含.pdf和.txt文件的curr目录,我只想将.pdf文件移到/home/userid (我使用了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:没有这样的文件或目录
我已经创建了无密码登录。是否有办法对匹配的模式文件进行批量复制?
发布于 2016-06-30 10:50:08
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;发布于 2016-06-30 09:07:25
*字符是由您的shell展开的通配符(不同的shell可能有不同的扩展规则),所以SSH (或SCP)对它一无所知。
此外,SSH对目录中的文件列表没有“集成”支持。如果您想列出这些文件,您将不得不采用“丑陋的方式”,执行远程ls *.pdf (通过使用Net::SSH::Perl),或者切换到类似于支持opendir函数的Net::SFTP之类的东西。
https://stackoverflow.com/questions/38116585
复制相似问题