컬이나 wget을 사용하여 다운로드 URL을 자동으로 얻을 수 있습니까?

컬이나 wget을 사용하여 다운로드 URL을 자동으로 얻을 수 있습니까?

나는 보통 SlackBuilds를 사용하여 Slackware용 패키지를 빌드합니다. wget을 사용하여 소스 코드를 다운로드하고 변수를 사용합니다.

이런 링크를 사용하면 버전이 바뀌어도 문제가 없는데 17.0.1에서 17.0.1로 변경하면 자동으로 다운로드되고 빌드... 등등이 됩니다.

VERSION=16.0.1
https://download.java.net/java/GA/jdk${VERSION}/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz

문제는 URL에 임의의 숫자가 나타날 때 이러한 임의의 숫자가 각 버전마다 변경된다는 것입니다! 이 예에서는 7147401fd7354114ac51ef3e1328291f 및 9

VERSION=16.0.1
https://download.java.net/java/GA/jdk${VERSION}/7147401fd7354114ac51ef3e1328291f/9/GPL/openjdk-${VERSION}_linux-x64_bin.tar.gz

변수 대체를 사용할 수는 있지만 약간 형편없네요. 변경 시 새로운 "임의" 숫자를 얻는 더 우아한 방법을 아는 사람이 있습니까? wget 또는 컬을 사용하십시오.

답변1

2초를 사용할 수 있습니다 wget:

  1. wget다운로드할 수 있는 파일 목록이 포함된 웹 사이트의 HTML 페이지입니다. 그런 다음 각각의 href=....
  2. href찾고 있는 것과 일치하는 패턴을 필터링합니다 . 이는 다음과 같이 보일 수 있습니다:
https://download.java.net/java/GA/jdk(*)/*/[0-9]/GPL/openjdk-(*)_linux-x64_bin.tar.gz
  1. 캡처 그룹을 사용하여 ([0-9]+\.[0-9]+)각 URL에서 버전을 추출합니다 (예: ).

  2. 다운로드하려는 버전을 선택하세요. 이는 가장 높은 버전일 수도 있고 변수와 일치하는 버전일 수도 있습니다.${VERSION}

  3. wget그 웹사이트


이는 다음과 관련이 있습니다.uscan데비안에서 사용하는 도구. uscan호출된 파일은 위에서 언급한 작업을 수행하는 데 사용되지만 debian/watch일반적으로 패키지의 최신 버전을 식별하거나(개발자에게 패키지 중 하나에 사용할 수 있는 업데이트가 있음을 알리거나) 개발을 위해 즉시 다운로드합니다. 직원은 이를 데비안으로 가져올 수 있습니다.

uscan데비안에 나타나는 패키지 이름과 일치하도록 다운로드한 아카이브의 이름을 바꾸는 것을 포함하여 여기서 끝나지 않습니다. 이는 기존의 다른 인접 파일에 따라 다르므로 uscan즉시 작동하지 않을 수도 있습니다. 최소한 인덱스 다운로드, href 구문 분석, 최상의 인덱스 선택 및 wget-ing이 매우 잘 작동하도록 설계되었음을 보여줍니다. uscan너무 복잡하지 않은 Perl 스크립트(~4000 sloc, 지울 수 있는 많은 항목 지원)이므로 필요에 맞게 조정할 수 있습니다.

관련 정보