以下是本人在写一个通用的sftp\ftp上传脚本(带检查和重试功能)时碰到的问题,问过度娘,没有好的解决办法,后来自己解决的,特共享出来,供大家参考。
以下内容是在linux环境进行过验证,AIX下应该是通用。如果有描述不对的地方,请友好提出,不要口吐芬芳,谢谢。
由于办公电脑无法连外网,以下是通过个人电脑纯手工敲打。只做参考,使用时,可将变量都通过变量传入。
1. 简单办法 sftp 获取远程ls信息到本地:
shell中通过函数的方式,将远程ls内容输出到本地,然后通过grep -v 进行加工去掉不必要的数据,得到最后的 ftpinfo.tmp
sftpGetLsInf()
{
sftp_ls()
{
sftp user@127.0.0.1 <<EOF
cd tmp
ls -l test.txt
exit
EOF
}
sftp_ls 2>&1 > ./ftpinfo.tmp0
grep -v 'sftp>' ./ftpinfo.tmp0 > ./ftpinfo.tmp
rm -f ./ftpinfo.tmp0
}
ftp就好说了,直接 mdir test.txt ./localdir/ftpinfo.tmp 即可将 test.txt详细信息缓存到本地ftpinfo.tmp文件中
2. sftp是否能批量上传文件?
答: 没办法通过 put a.txt b.txt 或者 mput a.txt b.txt 上传多个明确的文件。这样只会将a.txt上传后改名成b.txt。
但可以 mput *.txt 这样通过通配符上传多个文件
3. ftp 是否能批量上传文件?
答: ftp 可以通过 mput a.txt b.txt 或者 mput *.txt 上传多个文件。
ftp中 put a.txt b.txt 和sftp一样,也会将a.txt上传后改名成b.txt