使用wget或curl下载文件

本文讲解如何通过wget或者curl命令下载Google Drive上的文件。出发点是我的一个曲线上传数据集的任务,如果我用VPN翻墙再通过校园网VPN连接上计算机集群,上传速度大概是100-200k/s(11小时),如果单纯使用校园网VPN连接,上传速度更低(约20k/s),然而直接上传Google Drive的时间只有1.5小时,所以我决定,先将数据集上传至谷歌开车,再通过操作计算机集群资源下载数据集。脚本代码

分享链接

将文件设置为公开,当前版本的谷歌开车生成的分享链接的格式是:

https://drive.google.com/file/d/<fileid>/view

在后续过程中,除了fileid这个变量,还有用filename表示文件名。举个例子,对于文件epichands_anchors.zip,分享链接为:

https://drive.google.com/file/d/1MJZAlgRi1TjrUcqn4SuMNPccrZrxgyLD/view?usp=sharing

那么,

1
2
filename='epichands_anchors.zip'
fileid='1MJZAlgRi1TjrUcqn4SuMNPccrZrxgyLD'

wget命令

  • 小文件下载

    1
    
    wget --no-check-certificate "https://drive.google.com/uc?export=download&id=${fileid}" -O ${filename}
    
  • 大文件下载

    1
    
    wget --load-cookies /tmp/cookies.txt "https://drive.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://drive.google.com/uc?export=download&id=${fileid}' -O- | sed -rn 's/.confirm=([0-9A-Za-z_]+)./\1\n/p')&id=${fileid}" -O ${filename} && rm -rf /tmp/cookies.txt
    
  • 示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    #!/bin/bash
      
    # cd scratch place
    cd scratch/
      
    # Download zip dataset from Google Drive
    filename='epichands_anchors.zip'
    fileid='1MJZAlgRi1TjrUcqn4SuMNPccrZrxgyLD'
    wget --no-check-certificate "https://drive.google.com/uc?export=download&id=${fileid}" -O ${filename}
      
    # Unzip
    unzip -q ${filename}
    rm ${filename}
      
    # cd out
    cd
    

curl命令下载

  • 小文件 < 40MB

    1
    
    curl -L -o ${filename} "https://drive.google.com/uc?export=download&id=${fileid}"
    
  • 大文件 > 40MB

    1
    2
    3
    
    curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null
    curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}
    rm ./cookie
    
  • 示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    #!/bin/bash
      
    # cd scratch place
    cd scratch/
      
    # Download zip dataset from Google Drive
    filename="coco2014labels.zip"
    fileid="1s6-CmF5_SElM28r52P1OUrCcuXZN-SFo"
    curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null
    curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename}
    rm ./cookie
      
    # Unzip
    unzip -q ${filename}
    rm ${filename}
      
    # cd out
    cd
    

References

BC4提交作业|命令行下载
加载评论
点击刷新