如何使用 wget 下载存储在 Google Drive 中的文件而不公开共享特定文件的链接?

如何使用 wget 下载存储在 Google Drive 中的文件而不公开共享特定文件的链接?

首先使文件可公开共享,然后:-
我用于小文件下载

wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O FILENAME

对于大文件

wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.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

但是如何在不创建可公开共享的链接的情况下做到这一点?

注意:wget 对我来说不是必需的。如果您知道任何其他软件,请推荐我,但它必须包含以下功能:-

  1. 基于命令行
  2. 下载文件恢复功能
  3. 轻便易携(如果可能的话,这不是强制性的)
  4. 多线程下载和文件附加功能(如果可能的话,不是强制性的)

答案1

尝试看看rclone https://rclone.org/

它具有非常完整的功能集,基于命令行(语法非常类似于rsync),并且支持 Google Drive通过 OAuth。应该正是您要找的。

答案2

虽然许多以前的方法不再有效,但我发现以下方法仍然有效(至少在今天):

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

(将 FILE_ID 和 FILE_NAME 替换为 Google Drive 下载链接中的文件 ID 以及您要下载的文件的名称)

(答案最初发现于https://silicondales.com/tutorials/g-suite/how-to-wget-files-from-google-drive/

答案3

getgoogle在 PATH 中的某处创建一个名为 bash 脚本,例如 /usr/local/bin 或 ~/bin (如果您已在环境中映射了它)

#!/bin/bash
if [[ $1 == *"id="* ]]; then
    ID=${1##*'id='}
else
    ID=$1
fi
echo "Retrieving Google drive item with ID $ID"
wget --no-check-certificate -r "https://docs.google.com/uc?export=download&id=$ID" -O $(curl -s "https://drive.google.com/file/d/$ID/
view?usp=sharing" | grep -o '<title>.*</title>' | cut -d'>' -f2 | awk -F ' - Goo' '{print $1}')

确保getgoogle在保存脚本后通过运行以下命令更改脚本的权限:

chmod u+x getgoogle

用法:

getgoogle <URL|ID>

无论您有完整链接URL还是仅有标识符,都会下载 Google Drive 项目ID,并在下载时将其重命名为上传到 Google Drive 的文件的原始文件名。

相关内容