在对所有文件进行wget后,如何删除服务器中的文件? 我知道删除命令工作,当你在服务器上完成一个ftp,但我在运行shell脚本时无法使用该命令。下面是我的剧本,请让我知道它有什么问题。
#!/bin/bash
filelist='ls *20120330*'
for file in $filelist
do
ftp -vn <$hostname> <<EOFD
quote USER <username>
quote PASS <Pass>
binary
ls -lrt *20120330*
delete $filelist
quit
EOFD
done
答案 0 :(得分:5)
你想要
for file in *20120330*
而不是字面词ls
和*20120330*
的循环。如果您的真实用例更复杂,那么您可能有理由希望将文件列表放在变量中,但我的猜测是您没有,而且永远不会。
(你可能在想的是
for file in `ls *20120330*`
但由于不同但相关的原因,这也是错误的。另见http://porkmail.org/era/unix/award.html#ls)
切向地说,您可能最好创建一个删除所有文件名的脚本,而不是为要删除的每个文件创建一个新的ftp会话;
#!/bin/bash
dellist=
nl='
' # yeah, nl is a newline in single quotes
for file in *20120330*
do
dellist="delete $file$nl"
done
ftp -vn <$hostname> <<EOFD
quote USER <username>
quote PASS <Pass>
binary
ls -lrt \*20120330\*
$dellist
quit
EOFD
答案 1 :(得分:0)
尝试使用rm
代替delete
答案 2 :(得分:0)
如果是一个选项,我建议使用ncftpget而不是常规的ftp,因为它具有使这样的脚本更友好的功能。
答案 3 :(得分:0)
ftp命令
prompt
mdel *20120330*
答案 4 :(得分:-1)
#!/bin/bash
username=luser
password=secret
hostname=localhost
filelist=`ls *20120330*`
for f in $filelist; do
ftp -vn ${hostname} <<EOFD
USER ${username}
PASS ${password}
binary
ls -l ${f}
delete ${f}
quit
EOFD
done