代码之家  ›  专栏  ›  技术社区  ›  abramhum

关于使用CURL通过ftp获取文件夹中的所有文件

  •  0
  • abramhum  · 技术社区  · 5 年前

    以下是我的文件列表:

    enter image description here

    iiumlabs.[].csv.pgp iiumlabs* 我猜curl在通配符上不算大。

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

    问题:

    0 回复  |  直到 12 年前
        1
  •  13
  •   Uli Köhler    11 年前

    好吧,考虑到您使用的是Windows,最简单的方法就是使用标准 ftp 和它捆绑在一起的工具。我将以下解决方案基于windowsxp,希望它在其他版本上也能正常工作(或者稍作修改)。

    首先,您需要为 资金转移定价 程序,包含它的指令。你想怎么命名,就怎么写:

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

    ftp.myftpsite.com . 下面两行指定登录名和ftp将请求的密码(replace login pass 只有登录名和密码,没有任何关键字)。那么,你用 mget * 获取所有文件。而不是 * quit 关闭 资金转移定价 无交互提示的程序。

    cd 命令之前 mget . 应该很简单。

    资金转移定价 这样地:

    ftp -i -s:yourscript
    

    -i 禁用交互(下载文件前询问),以及 -s 指定所创建脚本的路径。


    PuTTy 不管怎样,工具。对这个案子特别感兴趣的是 pscp 这实际上是openssh的PuTTy counter部分 scp 命令。

    语法类似于 copy 命令,并且它支持通配符:

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

    如果您应该使用一个文件 -i path-to-key-file . 如果你使用密码, -pw pass . 它还可以重用使用PuTTy保存的会话,使用load -load your-session-name

        2
  •  42
  •   holzkohlengrill    7 年前

    如果不绑定到curl,则可能需要使用 wget 在递归模式下,但将其限制为一个递归级别,请尝试以下操作:;

    wget --no-verbose --no-parent --recursive --level=1\
    --no-directories --user=login --password=pass ftp://ftp.myftpsite.com/
    
    • --no-parent :递归检索时,永远不要升级到父目录。
    • --level=depth
    • --no-directories :递归检索时不要创建目录层次结构。
        3
  •  5
  •   Robi    11 年前

    这样的事情怎么样:

    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
    
        4
  •  2
  •   M.Selman SEZGİN    6 年前

    您可以在mac上使用如下脚本:

    for f in $(curl -s -l -u user:pass ftp://your_ftp_server_ip/folder/) 
     do curl -O -u user:pass ftp://your_ftp_server_ip/folder/$f 
    done
    
        5
  •  1
  •   Prasanth    12 年前

    $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脚本。

        6
  •  1
  •   kiwixz    10 年前

    下面是我如何使用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!
    

    为什么? ? 被利用 . ..

    熟食= ? 用空格支持名称