3

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

5 回答 5

5

你要

for file in *20120330*

而不是对字面单词lsand进行循环*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
于 2012-04-04T17:53:55.260 回答
0

尝试使用rm而不是delete

于 2012-04-04T14:42:42.683 回答
0

ftp 命令

prompt
mdel  *20120330*
于 2012-04-04T21:34:22.850 回答
0

如果它是一个选项,我建议使用ncftpget而不是常规的 ftp,因为它具有使其对像这样的脚本更友好的功能。

于 2012-04-04T18:54:19.260 回答
-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
于 2012-04-04T18:18:51.657 回答