使用shell脚本删除服务器中的文件

时间:2012-04-04 14:24:46

标签: bash shell unix

在对所有文件进行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

5 个答案:

答案 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