Вы можете использовать ожидаемый сценарий для той же цели (не требует дополнительных модулей).Ожидаемый объект выполнит «ls -l» на FTP-сервере, а скрипт perl проанализирует вывод и решит, существует ли файл.Его действительно просто реализовать.
Вот код,
PERL скрипт: (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.";
}
EXPECT скрипт: (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
}
}
Я использовал эту настройку в одном из моих инструментов, и я могу гарантировать, что она работает отлично:)