私は次のソースからこれを学びました。
curl -O
:Linux/Unix コマンドラインからカールを使用してファイルをダウンロードする- jq: curlコマンドのデータをurlencodeする方法は?
- 複数のファイルと
curl -J
: カールを使用してPDFファイルをダウンロードする - 条件付き
for
ループ: Shell:条件に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
得られた複数のファイルをダウンロードするために条件付きループを使用しています。重要なのは、ファイル名を次の目的で使用して出力することです。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
ただし、これら2つの条件for
ループはエンコードされたパスのみを出力し、ファイルのみをダウンロードします。
答え1
paths
最初のループは各反復で変数値を上書きします。後でこれが配列になりたいので、正しく作成されたことを確認してください。
paths=()
for urlencode in "${context_dirs[@]}"; do
paths+=( "$(jq -nr --arg v "$urlencode" '$v|@uri')" )
done
または、2つのループを組み合わせます。
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