我从以下来源了解到:
curl -O
:在 Linux / Unix 命令行上使用curl下载文件- jq: 如何为curl命令对数据进行urlencode?
- 多个文件和
curl -J
: 使用curl下载pdf文件 - 条件
for
循环: Shell:如何在 for 条件中使用 2 个变量和无法使用curl for循环下载数据
脚本说明:
变量,GitLab 所需的存储库文件 API:
branch="master" repo="my-dotfiles" private_token="XXY_wwwwwx-qQQQRRSSS" username="gusbemacbe"
我对多个文件使用了声明:
declare -a context_dirs=( "home/.config/Code - Insiders/Preferences" "home/.config/Code - Insiders/languagepacks.json" "home/.config/Code - Insiders/rapid_render.json" "home/.config/Code - Insiders/storage.json" )
我使用条件
for
循环将jq
所有文件从声明转换context_dirs
为编码 URL:for urlencode in "${context_dirs[@]}"; do paths=$(jq -nr --arg v "$urlencode" '$v|@uri') done
我使用条件
for
循环来下载从转换后curl
获取的多个文件。重要的是我使用和来输出文件名,并且for :paths
jq
-0
-J
-H
"PRIVATE-TOKEN: $private_token"
for file in "${paths[@]}"; do curl -sLOJH "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$username%2F$repo/repository/files/$file/raw?ref=$branch" done
完整源代码:
branch="master"
id="1911000X"
repo="my-dotfiles"
private_token="XXY_wwwwwx-qQQQRRSSS"
username="gusbemacbe"
declare -a context_dirs=(
"home/.config/Code - Insiders/Preferences"
"home/.config/Code - Insiders/languagepacks.json"
"home/.config/Code - Insiders/rapid_render.json"
"home/.config/Code - Insiders/storage.json"
)
for urlencode in "${context_dirs[@]}"; do
paths=$(jq -nr --arg v "$urlencode" '$v|@uri')
done
for file in "${paths[@]}"; do
curl -sLOJH "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$username%2F$repo/repository/files/$file/raw?ref=$branch"
done
但这两个条件for
循环仅输出编码路径并仅下载文件。
答案1
paths
第一个循环在每次迭代中覆盖变量的值。由于您稍后希望这是一个数组,因此请确保它已正确创建:
paths=()
for urlencode in "${context_dirs[@]}"; do
paths+=( "$(jq -nr --arg v "$urlencode" '$v|@uri')" )
done
或者,组合两个循环:
for urlencode in "${context_dirs[@]}"; do
file=$(jq -nr --arg v "$urlencode" '$v|@uri')
curl -sLOJH "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$username%2F$repo/repository/files/$file/raw?ref=$branch"
done