LinuxForum.Fans
Тема

Отправка файла по фтп через скрипт

Автор: astalavista 16 сообщений 4305 просмотров
06.10.2014 21:02 #395259

Помогите пожалуйста.
Нужно чтобы скрипт отправлял файлик на ftp. Фтп сервер настрое на анонимный доступ.


Фрагмент скрипта:

text

#!/bin/sh
host="192.168.1.11"
port="21"
user=""
pass=""
file="/home/user/123.zip"
ufile="/upload" 

ftp -n $host $port <<INPUT_END quote USER $user quote PASS $pass bin put $file $ufile quit INPUT_END

exit 0

При попытке выполнить выдает:

text
 ...
 files/entries read:  2305 (55M bytes)  skipped:  22 (13K bytes)
This FTP server is anonymous only.
Login with USER first.
Please login with USER and PASS.
Please login with USER and PASS.
ftp: bind: Address already in use

Не могу понять что он от меня хочет.

06.10.2014 21:30 #395260

Curl`ом, даже с паролем. Гуглится в 2 клика, или мануал например почитать.

06.10.2014 21:55 #395262

Ооооо... Спасибо. Через curl получилось. но возник еще попутный вопрос.

text
#!/bin/bash
...
zip -r $putt/$0-`date +%d%m%y%H%M`.zip /home/user/1
curl -T  ??????? ftp://192.168.1.1/upload/

Как мне можно запомнить ту метку времени, которая попадает в название файла архива, чтобы правильное имя файла указать в curl ??? Я ведь уже не смогу тем же шаблоном? Время то измениться может?

06.10.2014 22:07 #395264

astalavista
Включаем голову и пишем:

text

...
DATE=$(date +%d%m%y%H%M)
zip -r $putt/$0-$DATE.zip /home/user/1
curl -T $putt/$0-$DATE.zip ftp://192.168.1.1/upload/

Profit.

06.10.2014 22:30 #395265

Вот блин.... протупил ... :(
Спасибо.
Надо идти спать наверно.

06.10.2014 22:43 #395266

А возможно как то после

text
curl -T $putt/$0-$DATE.zip ftp://192.168.1.1/upload/

но перед тем как сделать rm file убедиться что файл отправлен? Ведь сервер может не ответить или еще что то... а файлик удалиться.

06.10.2014 22:45 · отредактировано #395267
"astalavista" написал:
перед тем как сделать rm file убедиться что файл отправлен?

Можно:

text

if [$? -eq 0 ]; then
    rm file
fi

Код завершения curl будет ненулевым в случае неуспеха отправки.

06.10.2014 23:05 · отредактировано #395269

Получилось.

07.10.2014 13:36 #395345
"yars" написал:
if [$? -eq 0 ]; then rm file fi

Не работат. Я уже переменную в кавычки взял в условии... Но выдает ошибку

text
[: : integer expression expected

Код такой:

text
test=$(curl -T ...... и т.п.)
if [ "$test" -eq 0 ]
then
rm файл
fi

Что то мне кажется что сравнить не получается у него с нулем...

07.10.2014 13:42 #395348

А если ставлю вместо -eq ==, то просто не удалянет файлик, ошибки не выводит

07.10.2014 13:46 #395350

Код такой

Ну в таком виде вы заносите в переменную TEST не код завершения, а нечто другое. Если сравенивать $? с нулем, то должно работать...

07.10.2014 14:01 #395354

Ну вот этот фрагмент полный

text
test=$(curl -T /home/user/$DAT.zip ftp://192.168.1.11/upload)
if [ "$test" -eq 0 ]
then
rm /home/user/$DAT.zip
fi

Если без условия if то файлик естественно отправляется (или не отправляется) и сразу удаляется

07.10.2014 16:53 #395412

T

"yars" написал:
Ну в таком виде вы заносите в переменную TEST не код завершения, а нечто другое

Ну так а как занести в переменную именно код завершения?

07.10.2014 17:02 #395413

Все понял. Теперь точно получилось

10.10.2014 10:54 #395758
"yars" написал:
if [$? -eq 0 ]; then

лучше

text
if curl …
then rm …
fi
10.10.2014 10:58 #395759
"astalavista" написал:
Ну так а как занести в переменную именно код завершения?
text
ERROR_CODE=$?

потом сравнивать с нулём так:

text
if (( ERROR_CODE == 0 )); then
    …
fi

двойные круглые скобки потому что арифметика

Войдите или зарегистрируйтесь, чтобы ответить.