21

cURL を使用して、特定のディレクトリ内のすべてのファイルをダウンロードしようとしています。

ファイルのリストは次のようになります。

ここに画像の説明を入力

私はbashスクリプトでやろうとしました:iiumlabs.[].csv.pgpそしてiiumlabs*、curlはワイルドカードでは大きくないと思います。

curl -u login:pass ftp.myftpsite.com/iiumlabs* -O

質問: cURL を使用してこのファイルのディレクトリをダウンロードするにはどうすればよいですか?

4

6 に答える 6

50

curl に縛られていない場合は、再帰モードでwgetを使用することをお勧めしますが、再帰のレベルを 1 つに制限するには、次のことを試してください。

wget --no-verbose --no-parent --recursive --level=1\
--no-directories --user=login --password=pass ftp://ftp.myftpsite.com/
  • --no-parent: 再帰的に取得する場合は、親ディレクトリに上がらないでください。
  • --level=depth: 再帰最大深さレベルの深さを指定します。デフォルトの最大深度は 5 レイヤーです。
  • --no-directories: 再帰的に取得する場合は、ディレクトリの階層を作成しないでください。
于 2012-08-02T21:03:06.357 に答える
13

ftpWindows を使用していることを考えると、Windows にバンドルされている標準ツールを使用するのが最も簡単な方法です。次のソリューションは Windows XP に基づいていますが、他のバージョンでも (または若干の変更を加えると) 動作することを期待しています。

まず、ftpプログラムの命令を含むバッチ (スクリプト) ファイルを作成する必要があります。好きな名前を付けて、次のように入力します。

curl -u login:pass ftp.myftpsite.com/iiumlabs* -O

open ftp.myftpsite.com
login
pass
mget *
quit

最初の行は で ftp サーバーへの接続を開きますftp.myftpsite.comlogin次の 2 行は、ログインと、ftp が要求するパスワードを指定します ( andpassをキーワードなしでログインとパスワードのみに置き換えます)。次に、使用mget *してすべてのファイルを取得します。の代わりに、*任意のワイルドカードを使用できます。最後に、インタラクティブなプロンプトなしquitでプログラムを閉じるために使用します。ftp

最初にディレクトリに入る必要がある場合は、 のcd前にコマンドを追加しmgetます。それはかなり簡単なはずです。

最後に、そのファイルを書き込んで、次のftpように実行します。

ftp -i -s:yourscript

where-iは対話機能 (ファイルをダウンロードする前に確認) を無効に-sし、作成したスクリプトへのパスを指定します。


残念ながら、SSH 経由のファイル転送は、Windows ではネイティブにサポートされていません。しかし、その場合は、とにかくPuTTyツールを使用することをお勧めします。このケースで特に興味深いのは、実質的に opensshコマンドpscpの PuTTy 対応部分です。scp

構文はコマンドに似てcopyおり、ワイルドカードをサポートしています。

pscp -batch login@mysshsite.com:iiumlabs* .

キー ファイルを使用して認証する場合は、-i path-to-key-file. パスワードを使用する場合は、-pw pass. -load your-session-nameload引数を使用して、PuTTy を使用して保存されたセッションを再利用することもできます。

于 2012-08-02T19:18:16.200 に答える
7

このようなものはどうですか:

for /f %%f in ('curl -s -l -u user:pass ftp://ftp.myftpsite.com/') do curl -O -u user:pass ftp://ftp.myftpsite.com/%%f
于 2014-03-20T17:11:03.197 に答える
1

cURL を使用してすばやくダウンロードする方法を次に示します (ただし、ダウンロードできるファイルの数はわかりません)。

setlocal EnableDelayedExpansion

cd where\to\download

set STR=
for /f "skip=2 delims=" %%F in ('P:\curl -l -u user:password ftp://ftp.example.com/directory/anotherone/') do set STR=-O "ftp://ftp.example.com/directory/anotherone/%%F" !STR!
path\to\curl.exe -v -u user:password !STR!

なぜskip=2 ? に乗るに...

delims=の理由 スペースを含む名前をサポートするには

于 2014-08-30T06:34:38.277 に答える
1

ああ、私はちょうどあなたが必要とするものを持っています!

$host = "ftp://example.com/dir/";
$savePath = "downloadedFiles";
if($check = isFtpUp($host)){

    echo $ip." -is alive<br />";

    $check = trim($check);
    $files = explode("\n",$check);

    foreach($files as $n=>$file){
        $file = trim($file);
        if($file !== "." || $file !== ".."){
            if(!saveFtpFile($file, $host.$file, $savePath)){
                // downloading failed. possible reason: $file is a folder name.
                // echo "Error downloading file.<br />";
            }else{
                echo "File: ".$file." - saved!<br />";
            }
        }else{
            // do nothing
        }
    }
}else{
    echo $ip." - is down.<br />";
}

isFtpUpおよび機能saveFtpFileは次のとおりです。

function isFtpUp($host){
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $host);
curl_setopt($ch, CURLOPT_USERPWD, "anonymous:your@email.com");
curl_setopt($ch, CURLOPT_FTPLISTONLY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);

$result = curl_exec($ch);

return $result;

}

function saveFtpFile( $targetFile = null, $sourceFile = null, $savePath){

// function settings
set_time_limit(60);
$timeout = 60;
$ftpuser = "anonymous";
$ftppassword = "your@email.com";
$savePath = "downloadedFiles"; // should exist!
$curl = curl_init();
$file = @fopen ($savePath.'/'.$targetFile, 'w');

if(!$file){
    return false;
}

curl_setopt($curl, CURLOPT_URL, $sourceFile);
curl_setopt($curl, CURLOPT_USERPWD, $ftpuser.':'.$ftppassword);

// curl settings

// curl_setopt($curl, CURLOPT_FAILONERROR, 1);
// curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_FILE, $file);

$result = curl_exec($curl);


if(!$result){
    return false;
}

curl_close($curl);
fclose($file);

return $result;
}

編集:

それはphpスクリプトです。.php ファイルとして保存し、Web サーバーに配置し、$ip をファイルをダウンロードする FTP サーバーのアドレス (IP である必要はありません) に変更し、このファイルと同じディレクトリにdownloadedFiles という名前のディレクトリを作成します。

于 2012-08-02T18:23:10.807 に答える