JSON 개체가 있습니다. 두 개의 필드가 있습니다 { 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을 실행하는 별도의 명령을 시작합니다.