UNIX, sh, ftp: перенос файлов с ftp пачкой

0000

Надо организовать remove, т. е. перенести файлы с ftp на unix-сервер. Сейчас делаю так

cd $DIR_TMP
ftp -i -n -v <server_name> <<FEOF
user <user_name> <user_password>
cd $DIR_FTP
binary
mget *
mdelete *
bye
FEOF

Но что то мне кажется это не совсем надежно, в том смысле, что если mget что то не перенесет, то эти файлы будут безнадежно утеряны.
Вопрос - как сделать понадежнее?
Есть еще вариант - выполнить ls на ftp, распарсить .lst фаил, сформировать на его основе ftp-скрипт (содержащий для каждого файла набор команд get, "if exists", delete) и выполнить скрипт на ftp - но что то это много кода, кажется можно проще.

shlyumper

lftp + команда mirror, например.

0000

shell на lftp пишет что команда неизвестна.
Это нестандартная прога? Прав для установки сторонних утилит у меня нет.

evgen5555

Устанавливай локально
wget-ом не пробовал?

0000

> Устанавливай локально
Не все так просто - что то поставить мне полюбому не дадут - надо обойтись тем что есть. У мя даже доступ к тому компу тока удаленный по ssh.
Кто такой wget? Пишет, что неизвестная команда.
P.S. UNIX совсем не знаю, живьем не видел. Учу sh находу (только то, что требуется для задачи).

krishtaf

У мя даже доступ к тому компу тока удаленный по ssh

гы гы
если у тебя есть ssh доступ - значит у тебя есть любой доступ

Ivan8209

> У мя даже доступ к тому компу тока удаленный по ssh.
man scp
---
"Аллах не ведёт людей неверных."

0000

А это еще нахрена?

shlyumper

а это чтобы с ftp не парица

evgen5555

Учи-учи, контра плохого не посоветует

0000

Вот это и настораживает
Че та пошаmanил и не понял, а как в той тулзе задать пароль на коннект?

valodyr

Ключик залить, вестимо. Если, конечно, разрешено на стороне сервера.

0000

Не разрешено - сервер не мой.

Ivan8209

Блин.
Сколько файлов?
Какой объём?
За один раз (одно соединение) сможешь всё передать?
---
"Аллах не ведёт людей неверных."

0000

Файлов без понятия сколько будет - в районе 100 наверно. Объем - ну метров 100. Соедиение вроде по локалке, никто ничего обрубать не будет, т.е. за одно соедиение все стянуть получится.

Ivan8209


cpio -0oH ustar < list | ssh there 'cd path && tar xf -'

Список файлов готовится примерно так:

find /path/to/files -depth -print0 > list

В самом простом случае,

tar cf - | ssh there 'tar xf -'

Если что-то произойдёт не так, тебе скажут.
---
"Аллах не ведёт людей неверных."

0000

user вижу, there вижу, password не вижу.
P.S. login/password на unix комп не совпадает с login/password на ftp.
Вообще мне кажется я немного запутал всех упоминанием ssh. Ситуация следующая:
у меня Win-машина, которая имеет доступ по ssh к unix-машине. Там я пишу скрипт, который будет выполняться на unix-машине. Этот скрипт должен сливать данные с ftp (это сторонняя машина, похоже в локалке с неизвестным ОС).

Ivan8209

> Ситуация следующая:
С этого надо было начинать.
> Там я пишу скрипт, который будет выполняться на unix-машине.
uname -mrs
> Этот скрипт должен сливать данные с ftp
which wget
which ncftp
which lftp
which какие-ещё бывают-приличные-ftp
ident `which ftp`
what `which ftp`
ftp --version
which curl
---
"Аллах не ведёт людей неверных."

ava3443

Не разрешено - сервер не мой.
c чего ты взял что не разрешено? с тем что сервер не твой это никак не связано

0000

UNIX то же не особо мой (у мя доступ к девелоперскому, а на продуктив меня никто не пустит со своими прогами). Вообщем я никто и зовут меня никак
Вообщем я так понял, что стандартными средсвами придется реализовывать

valentin160962

Общая идея:
cd $DIR_TMP
ftp ftp:// host/$DIR_FTP/* #Делает за тебя cd и get; см. man
A=`ls | awk '{print "mdelete "$0"\n"}'`
echo -e "cd $DIR_FTP\n $A\nbye" | ftp host
Пароли хранить в ~/.netrc

valentin160962

Либо поюзать какой-нибудь модуль perl'а (типа Net::File и вообще cpan.org )

Marusetta

>>>Но что то мне кажется это не совсем надежно, в том смысле, что если mget что то не перенесет, то эти файлы будут безнадежно утеряны.
А нельзя банально проверять на равенство результат/источник и если равно удалять? Или на тот сервер вообще только на аплоад открыт?

0000

Хм, стоит посмотреть (я про первый пост)
2
Банально - слишком большой код у меня получается, поскольку в текущий момент времени активен либо поток с ftp либо с sh командами. Конечно наверняка можно исхитриться (см. пост выше) и сделать все попроще. Просто я до этого с UNIX не работал и коротко накатать у меня не получается.

sergey_m

Может надо просто поставить rsync?

Werdna

Не пугай человека, у него венда.

Ivan8209

> коротко накатать у меня не получается.
Это ещё не известно. Ты так и не сказал, что у тебя за уникс,
и что умеет твой ftp-клиент. Может быть, не всё так печально.
---
"Аллах не ведёт людей неверных."
Оставить комментарий
Имя или ник:
Комментарий: