我有一个 JSON 对象。它有两个字段;{ href: string, filename: string }
。我想从 href 下载一个文件,并将其名称设置为$FILENAME.pdf
.这是循环发生的
我怎样才能做到这一点?最好没有循环,因为我总是必须查找语法。
我正在想象这样的事情:cat files.json | jq-like-splitter '.href' '.filename' | wget $HREF -o $FILENAME.pdf
答案1
您可以使用xargs
并启动一个小型 shell 脚本:
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 。