Dhr*_*uuv 4 shell bash ssh sftp exit
我有一个脚本,它通过 SFTP 连接到远程服务器并从那里获取一些文件。我的脚本是这样的:
/usr/bin/sftp USER@remote.server.com <<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
Run Code Online (Sandbox Code Playgroud)
但是,即使脚本没有找到具有该模式的文件,它也会转到脚本的else部分并在屏幕上为我提供输出
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
Run Code Online (Sandbox Code Playgroud)
关于我在这里可能做错的任何建议?
您得到了正确的返回码,sftp 会话正确执行,因此返回码为 0。
您应该改用scp
它,如果复制失败,它不会返回 0。
你可以这样做:
file=file_pattern`date -d "last month" +%m%Y`.csv
remote=USER@remote.server.com:/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
Run Code Online (Sandbox Code Playgroud)
编辑:我将复制目标更改为文件名:如果您复制到一个目录并且该目录丢失,您将创建一个具有该目录名的文件。
归档时间: |
|
查看次数: |
6229 次 |
最近记录: |