Sie könnten verwenden ein Skript erwarten für den gleichen Zweck (benötigt keine zusätzlichen Module). Das Expect führt "ls -l" auf dem FTP-Server aus und das Perl-Skript parst die Ausgabe und entscheidet, ob die Datei existiert. Es ist wirklich einfach zu implementieren.
Hier ist der Code,
PERL-Skript: (main.pl)
# ftpLog variable stores output of the expect script which logs in to FTP server and runs "ls -l" command
$fileName = "myFile.txt";
$ftpLog = `/usr/local/bin/expect /path/to/expect_script/ftp_chk.exp $ftpIP $ftpUser $ftpPass $ftpPath`;
# verify that file exists on FTP server by looking for filename in "ls -l" output
if(index($ftpLog,$fileName) > -1)
{
print "File exists!";
}
else
{
print "File does not exist.";
}
Skript ERWARTEN: (ftp_chk.exp)
#!/usr/bin/expect -f
set force_conservative 0;
set timeout 30
set ftpIP [lindex $argv 0]
set ftpUser [lindex $argv 1]
set ftpPass [lindex $argv 2]
set ftpPath [lindex $argv 3]
spawn ftp $ftpIP
expect "Name ("
send "$ftpUser\r"
sleep 2
expect {
"assword:" {
send "$ftpPass\r"
sleep 2
expect "ftp>"
send "cd $ftpPath\r\n"
sleep 2
expect "ftp>"
send "ls -l\r\n"
sleep 2
exit
}
"yes/no)?" {
send "yes\r"
sleep 2
exp_continue
}
timeout {
puts "\nError: ftp timed out.\n"
exit
}
}
ich dieses Setup verwendet haben, in einem der meine Werkzeuge und ich kann garantieren, dass es perfekt funktioniert :)
aber was zu tun ist, wenn es ein Remote-Server ist, der passwortgeschützt ist? – Jithin
@Jithin Das sind die ssh-Schlüssel. –
Ja, ich habe es. Gibt es jedoch eine Problemumgehung im Skript, wenn der Remote-Server passwortgeschützt ist? – Jithin