ファイルをローカルに保存せずに(ローカルストレージが小さすぎるため)、通常のhttpリンクからftpサーバー(ubuntuの下)に大きなファイルをダウンロードしたいです。
wget または小さな perl スクリプトを使用してこれを行う方法について何かアイデアはありますか? (ローカル マシンに sudo 権限がありません)。
これが私の見解です。コマンドラインでのNet::FTPのwget
組み合わせです。
wget -O - http://website.com/hugefile.zip | perl -MNet::FTP -e 'my $ftp = Net::FTP->new("ftp.example.com"); $ftp->login("user", "pass"); $ftp->put(\*STDIN, "hugefile.zip");'
もちろん、ファイル(ftpupload.pl
)に入れて実行することもできます。
#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP;
my $ftp = Net::FTP->new("ftp.example.com"); # connect to FTP server
$ftp->login("user", "pass"); # login with your credentials
# Because of the pipe we get the file content on STDIN
# Net::FTP's put is able to handle a pipe as well as a filehandle
$ftp->put(\*STDIN, "hugefile.zip");
次のように実行します。
wget -O - http://website.com/hugefile.zip | perl ftpupload.pl
FTPの生活を楽にするCPANモジュールがあります。もちろんです。
http://search.cpan.org/search?mode=module&query=Net%3A%3AFTP
そして、WWW :: Mechanizeはファイルを検索し、リンクをたどります。
これらのモジュールを使用すると、問題を解決できると思います。
wputを試すことができます。あまり知られていないツールですが、使えると思います。
wgetのoutput-documentオプションを使用する
wget -O /dev/null http://foo.com/file.uuu
wgetのマニュアルページから:
"-O file
--output-document=file
The documents will not be written to the appropriate files, but all will be
concatenated together and written to file. If - is used as file, documents will be
printed to standard output, disabling link conversion. (Use ./- to print to a file
literally named -.)
Use of -O is not intended to mean simply "use the name file instead of the
one in the URL;" rather, it is analogous to shell redirection: wget -O file http://foo is
intended to work like wget -O - http://foo > file; file will be truncated immediately,
and all downloaded content will be written there."
しかし、その目的が何であるかわかりません