When the shared files on Google Drive is downloaded, it is necessary to change the download method by the file size. The boundary of file size when the method is changed is about 40MB.
filename="### filename ###"
fileid="### file ID ###"
curl -L -o ${filename} "https://drive.google.com/uc?export=download&id=${fileid}"
When it tries to download the file with more than 40MB, Google says to download from following URL.
<a id="uc-download-link" class="goog-inline-block jfk-button jfk-button-action" href="/uc?export=download&confirm=####&id=### file ID ###">download</a>
Query included confirm=####
is important for downloading the files with large size. In order to retrieve the query from the HTML, it uses pup
.
pup 'a#uc-download-link attr{href}'
And sed
is used to remove amp;
.
sed -e 's/amp;//g'`
So curl command is as follows.
filename="### filename ###"
fileid="### file ID ###"
query=`curl -c ./cookie.txt -s -L "https://drive.google.com/uc?export=download&id=${fileid}" | pup 'a#uc-download-link attr{href}' | sed -e 's/amp;//g'`
curl -b ./cookie.txt -L -o ${filename} "https://drive.google.com${query}"
The value of confirm
is changed every time. So when the value of confirm
is retrieved, the cookie is saved using -c ./cookie.txt
, and when the file is downloaded, the cookie has to be read using -b ./cookie.txt
.
By using this method, you can download files with the size of over 1 GB.
Reference: http://qiita.com/netwing/items/f2a595389f39206235e8
This is a simple bash script.
#!/bin/bash
fileid="### file id ###"
filename="MyFile.csv"
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}
If you will use a CLI tool, please use this. This is a CLI tool to download shared files and folders from Google Drive. For large file, the resumable download can be also run.
Recently, it seems that the specification of this flow has been changed. So I updated this answer. In order to download a publicly shared file of large size from Google Drive, you can use the following script.
#!/bin/bash
fileid="### file id ###"
filename="MyFile.csv"
html=`curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}"`
curl -Lb ./cookie "https://drive.google.com/uc?export=download&`echo ${html}|grep -Po '(confirm=[a-zA-Z0-9\-_]+)'`&id=${fileid}" -o ${filename}
-
In this case, the ID for downloading is retrieved from the HTML data as follows.
<form id="downloadForm" action="https://drive.google.com/uc?export=download&id={fileId}&confirm={value for downloading}" method="post">
-
When you want to download a publicly shared file of small size from Google Drive, you can use the following command.
curl -L "https://drive.google.com/uc?export=download&id=### fileId ###" -o sampleoutput.csv
-
Also, goodls was updated to v1.2.8.
From the following @excellproj 's comment,
January 2024 curl -L "https://drive.usercontent.google.com/download?id=${fileId}&export=download&confirm=t" -o "file.zip" working great for me. Small and large files
I checked this endpoint. By this, the following result is obtained. In the current stage, the following endpoint can be used.
https://drive.usercontent.google.com/download?id={fileId}&confirm=xxx
It seems that various values can be used to xxx
of confirm=xxx
. So, even confirm=xxx
and confirm=yy
and confirm=z
can be used.
The sample curl command is as follows.
curl "https://drive.usercontent.google.com/download?id={fileId}&confirm=xxx" -o filename
And/or,
curl -L "https://drive.usercontent.google.com/download?id={fileId}&confirm=xxx" -o filename
- August 3, 2022: I could confirm that the method on February 17, 2022, can be still available.
- March 4, 2024: I could confirm that the method on January 21, 2024, can be still available.
For MacOS use
curl -Lb ./cookie "https://drive.google.com/uc?export=download&`echo ${html} | grep -Eio '(confirm=[a-zA-Z0-9-_]+)'`&id=${fileid}" -o ${filename}