现在我有一个.ksh ftp函数可以从FTP站点删除文件。它获取站点信息和文件名,并从FTP站点删除该文件。
doftp(){
ftp -vni <<STOP
open $1
user $2 $3
binary\
cd $5
delete $6
STOP
}
该功能唯一的缺点是,如果你需要从服务器上删除多个文件,它每次都会建立一个新的连接。我想加快速度并删除同一连接中的多个文件。我试过这样的东西,6美元是要删除的文件数组:
deldoftp(){
ftp -vni <<STOP
counter=0
for s in ${6[@]}; do
counter++
if [counter=1]
then
open $1
user $2 $3
binary\
cd $5
elif [counter <= 50]
then
delete $s
else
STOP
counter=0
fi
done
我还没有使用此代码。这是由于语法错误还是ksh没有设计为这样工作?
答案 0 :(得分:1)
您应该尝试以下方法:在函数内部将ftp命令发送到管道ftp进程的标准输入:
function doftp {
# in ksh functions "typeset" declares local variables
typeset host=$1
shift
typeset user=$1
shift
typeset pass=$1
shift
typeset dir=$1
shift
(
# printed text is send as input of the ftp process
print "open $host"
print -R "user $user $pass" # -R to prevent backslash interpretation
print "binary"
print "cd $dir"
print "pwd"
# $1 $2 ... are the files to delete
for file in "$@"
do
print "rm $file"
done
) | ftp -vni
}