Удаление файлов на сервере с помощью сценария оболочки
Как вы удаляете файл на сервере после выполнения всех файлов?
Я понимаю, что команда удаления работает, когда вы сделали 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
Если это вариант, я бы рекомендовал использовать ncftpget вместо обычного ftp, так как он имеет функции, которые делают его более удобным для таких сценариев.
#!/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