2016-06-30 4 views
2

Gibt es eine Möglichkeit, mehrere Dateien mit Perl zu scannen, die einem Platzhaltermuster entsprechen?SCP-Dateien mit passendem Muster unter Verwendung von Perl

Say Server A hat curr Verzeichnis enthält. Pdf und. Txt-Dateien und ich möchte nur die PDF-Dateien auf Server B unter/home/userid Ich habe Net :: SCP, aber ich sehe, gibt es keine Masse kopiere wie im normalen scp-Befehl zB. scp * .pdf userid @ serverB

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

ich SCP- $ ändern möchten> setzen ("*. pdf") or die scp $ -> {errstr}; Wenn ich * .pdf perl wirft

Fehler ändern

* .pdf: Keine solche Datei oder das Verzeichnis

ich bereits Anmeldung ohne Passwort erstellt. Gibt es eine Möglichkeit, Massenkopien passender Musterdateien zu erstellen?

Antwort

1

Das * Zeichen ist ein Platzhalter, der durch Ihre Shell erweitert wird (und verschiedene Shells können unterschiedliche Erweiterungsregeln haben), so dass SSH (oder SCP) nichts darüber weiß.

Außerdem hat SSH keine "integrierte" Unterstützung für das Auflisten von Dateien in Verzeichnissen. Wenn Sie die Dateien auflisten möchten, müssen Sie entweder den "hässlichen Weg" gehen, indem Sie eine entfernte ls *.pdf (mit Net::SSH::Perl), oder wechseln Sie zu etwas anders wie Net::SFTP, die eine opendir Funktion unterstützt.

+0

Danke für die Informationen – Sree

2

Net::OpenSSH Verwendung:

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

Oder, wenn Sie das Skript in Windows ausgeführt wird, Net::SSH::Any bietet eine identische Schnittstelle:

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

Ihnen sehr danken. – Sree