Удаление файлов на сервере с помощью сценария оболочки

Как вы удаляете файл на сервере после выполнения всех файлов?
Я понимаю, что команда удаления работает, когда вы сделали ftp на сервер, но я не могу использовать команду во время запуска сценария оболочки. Ниже мой сценарий, пожалуйста, дайте мне знать, что в нем не так.

#!/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 ответов

Ты хочешь

for file in *20120330*

а не петля над буквальными словами ls а также *20120330*, Если ваш реальный вариант использования намного, намного сложнее, может быть причина, по которой вам нужен список файлов в переменной, но я предполагаю, что вы этого не сделаете, и никогда не будете.

(То, что вы, вероятно, думали, было

for file in `ls *20120330*`

но это также неправильно по другим, но связанным причинам. Смотрите также http://porkmail.org/era/unix/award.html)

Тангенциально, вам, вероятно, лучше создать скрипт, который удаляет все имена файлов, чем создавать новый сеанс 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

Попробуйте использовать rm вместо delete

Если это вариант, я бы рекомендовал использовать ncftpget вместо обычного ftp, так как он имеет функции, которые делают его более удобным для таких сценариев.

Команда ftp

prompt
mdel  *20120330*
#!/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
Другие вопросы по тегам