Se podría utilizar un script de espera para el mismo propósito (no requiere módulos adicionales). El esperado ejecutará "ls -l" en el servidor FTP y el script perl analizará el resultado y decidirá si el archivo existe. Es realmente simple de implementar.
Aquí está el código,
script en 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.";
}
ESPERAR guión: (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
}
}
He utilizado esta configuración en una de mis herramientas y yo podemos garantizar que funciona perfectamente :)
pero ¿qué hacer si es un servidor remoto que está protegido por contraseña? – Jithin
@Jithin Para eso están las claves ssh. –
Sí, lo tengo. Pero, ¿hay alguna solución en el script, si el servidor remoto está protegido con contraseña? – Jithin