Ich habe ein Skript, das über SFTP eine Verbindung zu einem Remote-Server herstellt und von dort eine Datei erhält. Mein Skript geht so:
/usr/bin/sftp [email protected] <<EOF
lcd /dir1/dir2/dir3
cd /rsdir1/rsdir2/rsdir3
get file_pattern`date -d "last month" +%m%Y`.csv
EOF
rc=$?
if [[ $rc != 0 ]]
then
echo "Error occured getting file and the script abended with error code $rc" `date "+%Y-%m-%d-%H.%M.%S"`
exit 1
else
echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
fi
Aber selbst wenn das Skript die Datei mit dem Muster nicht findet, geht es zu else Teil des Skripts und gibt mir die Ausgabe auf dem Bildschirm als
Connecting to remote.server.com...
sftp> lcd /dir1/dir2/dir3
sftp> cd /rsdir1/rsdir2/rsdir3
sftp> get file_pattern032014.csv
Couldn't stat remote file: No such file or directory
File "/rsdir1/rsdir2/rsdir3/file_pattern032014.csv" not found.
Successfully transferred the file YYYY-MM-DD-24HH.MI.SS
Irgendwelche Ratschläge, was ich hier falsch mache?
Akzeptierte Antwort:
Sie haben den richtigen Rückgabecode, die sftp-Sitzung wurde korrekt ausgeführt, sodass der Rückgabecode 0 ist.
Sie sollten scp
verwenden stattdessen gibt es nicht 0 zurück, wenn es nicht kopiert werden kann.
Sie könnten so etwas tun:
file=file_pattern`date -d "last month" +%m%Y`.csv
[email protected]:/rsdir1/rsdir2/rsdir3/$file
local=/rsdir1/rsdir2/rsdir3/$file
if scp -q $remote $local
then
echo "Successfully transferred the file" `date "+%Y-%m-%d-%H.%M.%S"`
else
echo "Error occured getting file and the script abended with error code $?" `date "+%Y-%m-%d-%H.%M.%S"`
exit 1
fi
BEARBEITEN:Ich habe das Kopierziel in einen Dateinamen geändert:Wenn Sie in ein Verzeichnis kopieren und dieses Verzeichnis fehlt, erstellen Sie eine Datei mit dem Verzeichnisnamen.