Saya memiliki skrip yang terhubung ke server jarak jauh melalui SFTP dan mendapatkan beberapa file dari sana. Skrip saya seperti ini:
/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
Namun, meskipun skrip tidak menemukan file dengan pola, skrip akan tetap ke else bagian dari skrip dan memberi saya output di layar sebagai
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
Adakah saran tentang apa yang mungkin saya lakukan salah di sini?
Jawaban yang Diterima:
Anda mendapatkan kode pengembalian yang benar, sesi sftp dijalankan dengan benar sehingga kode pengembalian adalah 0.
Anda harus menggunakan scp
sebagai gantinya, ia tidak mengembalikan 0 jika gagal menyalin.
Anda dapat melakukan sesuatu seperti :
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
EDIT:Saya mengubah target salin menjadi nama file:Jika Anda menyalin ke direktori dan direktori itu hilang, Anda akan membuat file yang memiliki nama direktori.