使用 bash 从共享 link 下载 iCloud 文件

Download iCloud file from shared link using bash

我想从 iCloud 下载文件。我可以将 link 共享到一个文件。然而,该文件并未在 url 中直接 link 编辑,但可以检索“真实”下载 url:

#!/bin/bash
# given "https://www.icloud.com/iclouddrive/<ID>#<Filename>
ID="...."
URL=$(curl 'https://ckdatabasews.icloud.com/database/1/com.apple.cloudkit/production/public/records/resolve' \
  --data-raw '{"shortGUIDs":[{"value":"$ID"}]}' --compressed \
  jq -r '.results[0].rootRecord.fields.fileContent.value.downloadURL')
curl "$URL" -o myfile.ext

来源:https://gist.github.com/jpillora/702ded79330043e38e8202b5c73835e5

        "fileContent" : {
          "value" : {
...
            "downloadURL" : "https://cvws.icloud-content.com/B/CYo..."
          },

这是行不通的:

rl: (6) Could not resolve host: jq
curl: (3) nested brace in URL position 17:
{
  "results" : [ {
    "shortGUID" : {
      "value" : "$ID",
      "shouldFetchRootRecord" : true
    },
    "reason" : "shortGUID cannot be null or empty",
    "serverErrorCode" : "BAD_REQUEST"
  } ]
}

任何想法,我可以做些什么来完成这项工作?

如@dan 所述,jq 不是 curl 参数,它是一个单独的命令。因此你需要 | 管道而不是 \.

所以命令看起来像这样:

URL=$(curl 'https://ckdatabasews.icloud.com/database/1/com.apple.cloudkit/production/public/records/resolve' \ --data-raw '{"shortGUIDs":[{"value":"$ID"}]}' --compressed | jq -r '.results[0].rootRecord.fields.fileContent.value.downloadURL')

我通过安装jq并直接添加ID而不是使用$id解决了这个问题。仅仅安装 jq 是不够的。

brew install jq


#!/bin/bash
# given "https://www.icloud.com/iclouddrive/<ID>#<Filename>

URL=$(curl 'https://ckdatabasews.icloud.com/database/1/com.apple.cloudkit/production/public/records/resolve' \
  --data-raw '{"shortGUIDs":[{"value":"ID"}]}' --compressed | jq -r '.results[0].rootRecord.fields.fileContent.value.downloadURL')
Echo $url
curl "$URL" -o myfile.ext