URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8609
[ Назад ]

Исходное сообщение
"Скрипт в bash"

Отправлено 13th_Apostol , 01-Фев-10 16:44 
Необходима рабочая команда.
Есть вывод команды, который нужно потоком лить на ftp, без временных файлов.
например
anyprogram | echo  "put -passwd" | ftp -a localhost
anyprogram - выдает инфу, которую нужно динамично лить на ftp
Вариант с временными файлами не подходит из-за огромного объема файлов (около 50 гб).

Содержание

Сообщения в этом обсуждении
"Скрипт в bash"
Отправлено tee , 02-Фев-10 00:01 
>Необходима рабочая команда.
>Есть вывод команды, который нужно потоком лить на ftp, без временных файлов.
>
>например
>anyprogram | echo  "put -passwd" | ftp -a localhost
>anyprogram - выдает инфу, которую нужно динамично лить на ftp
>Вариант с временными файлами не подходит из-за огромного объема файлов (около 50
>гб).

^ а так что? Может какую вариацию fifo использовать (разрешитьт записывать лишь определённый объём информации. Т.е. записали 1 мегабайт - ftp прочёл, только потом записали 2 мегабайт - ftp прочёл... но тгда ограничивается скорость). И почему BASH, может что-то другое?


"Скрипт в bash"
Отправлено ACCA , 02-Фев-10 06:51 
FTP - очень плохая идея по многим причинам. rsh+Kerberos или даже ssh или даже просто rsh сильно лучше.

Формально вопрос решается с помощью Perl Net::FTP

use Net::FTP;
my $remote_filename='remote_file';
my $ftp = Net::FTP->new('server.address', Debug => 0);
$ftp->login("first_server_username","first_server_password");
$ftp->put(\*STDIN,$remote_filename) || die "Upload from STDIN to $remote_filename failed\n";


"Скрипт в bash"
Отправлено sproot , 07-Фев-10 10:48 
>Необходима рабочая команда.
>Есть вывод команды, который нужно потоком лить на ftp, без временных файлов.
>
>например
>anyprogram | echo  "put -passwd" | ftp -a localhost
>anyprogram - выдает инфу, которую нужно динамично лить на ftp
>Вариант с временными файлами не подходит из-за огромного объема файлов (около 50
>гб).

sproot@matrix:~$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.0.7)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls pub/otchet.xls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> quit
221 Goodbye.
sproot@matrix:~$                          
sproot@matrix:~$ cat .netrc
machine localhost
login anonymous
password bla-bla-bla@smile.com

sproot@matrix:~$
sproot@matrix:~$ ftp localhost <<FTP
> cd pub
> put "|cat ~/otchet.xls" otchet.xls
> FTP

sproot@matrix:~$ ftp localhost
Connected to localhost.
220 (vsFTPd 2.0.7)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls pub/otchet.xls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-------    1 1000     65534       96768 Feb 07 07:43 otchet.xls
226 Directory send OK.
ftp> quit
221 Goodbye.
sproot@matrix:~$


Создать список файлов, думаю, проблем не составит.