3

すべてのファイルの wget を実行した後、サーバー内のファイルを削除するにはどうすればよいですか?
サーバーに ftp を実行した場合、delete コマンドが機能することは理解していますが、シェル スクリプトの実行中にコマンドを使用することはできません。以下は私のスクリプトです。何が問題なのか教えてください。

#!/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*

lsリテラルの単語and をループするのではなく、*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

ftp コマンド

prompt
mdel  *20120330*
于 2012-04-04T21:34:22.850 に答える
0

オプションである場合は、通常の ftp の代わりにncftpgetを使用することをお勧めします。これには、このようなスクリプトを作成しやすくする機能があるためです。

于 2012-04-04T18:54:19.260 に答える
0

rmの代わりに使用してみてくださいdelete

于 2012-04-04T14:42:42.683 に答える
-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 に答える