JSONオブジェクトがあります。 2つのフィールドがあります{ href: string, filename: string }
。 hrefからファイルをダウンロードして名前をに設定したいと思います$FILENAME.pdf
。この問題は繰り返し発生します。
どうすればいいですか?常に構文を見つける必要があるので、ループがないことをお勧めします。
私は次のことを想像しています:cat files.json | jq-like-splitter '.href' '.filename' | wget $HREF -o $FILENAME.pdf
答え1
xargs
小さなシェルスクリプトを使用して起動できます。
jq -r '.href, .filename' file.json | xargs -n2 sh -c 'wget "$1" -O "$2"' sh
wget
オプションは-o
ログファイルと-O
「出力文書」に適用されます。
答え2
ソリューションに似ていますxargs
がparallel
。使用すると、
パイプや追加の呼び出しが不要なので、よりエレガントだと思いますsh
。
parallel -n2 wget {1} -O {2} ::: "$(jq -r '.href, .filename' file.json)"
答え3
Linuxのjq-splitterについてはわかりませんが、sedを使用してフィールドを分割し、出力を変数として読み取ってwgetを実行できます。
$> read HREF FILENAME < <(sed -r 's/(.*href:[ ]*)([^, ]*)(.*filename:[ ]*)([^, ]*)(.*)$/\2 \4/' files.json);wget "${HREF}" -o "${FILENAME}.pdf"
sed
このオプションを使用すると、-r
正規表現を有効にしてキャプチャグループを作成し、hrefの前のすべての項目を解析し、その値を取得できます。次に、ファイル名の前のすべての項目をインポートし、その値をインポートします。キャプチャグループ1と4のスペースで区切られた出力を印刷します。
値を読み取ったHREF
後、FILENAME
セミコロンは、保存された値でwgetを実行する別のコマンドを開始します。