wget URL --trust-server-names에서 파일 이름 가져오기

wget URL --trust-server-names에서 파일 이름 가져오기

많은 웹사이트에서는 최신 버전의 바이너리를 얻기 위해 URL을 리디렉션합니다.

예를 들어:

wget https://download.mozilla.org/?product=firefox-aurora-latest-l10n&os=linux64&lang=fr

Firefox의 최신 개발자 버전을 다운로드할 수 있습니다. 출력 파일은 "firefox-50.0a2.fr.linux-x86_64.tar.bz2".

하지만

wget https://download.mozilla.org/?product=firefox-aurora-latest-l10n&os=linux64&lang=fr -P $HOME

다음과 같은 출력 파일 이름이 생성됩니다.?product=firefox-aurora-latest-l10n&os=linux64&lang=fr".

그래서 나는 다음을 사용할 것입니다 :

wget https://download.mozilla.org/?product=firefox-aurora-latest-l10n&os=linux64&lang=fr -P $HOME --trust-server-names

올바른 파일 이름으로 리디렉션: "Firefox-50.0a2.fr.linux-x86_64.tar.bz2".

하지만 다음 업데이트에서는 파일 이름이 달라집니다.

현재 스크립트를 작성 중이므로 올바른 파일 이름의 파일을 다운로드해야 합니다.

내 질문은 다음과 같습니다

나중에 아카이브를 추출하는 데 사용할 수 있도록 $var에 다운로드한 파일 이름을 어떻게 얻을 수 있습니까?

참고: 기본 이름은 URL에 없기 때문에 사용할 수 없습니다.

참고 2: 실험적이고 신뢰할 수 없기 --trust-server-names때문에 이것을 사용하고 있습니다 .--content-disposition

답변1

파일 이름은 아래와 같이 명령의 stderr 출력에서 ​​볼 수 있습니다.

Saving to: 'firefox-50.0a2.fr.linux-x86_64.tar.bz2'

따라서 stderr를 파일이나 파이프로 캡처하고 문자열을 추출할 수 있습니다.

if wget ... 2>log
then filename=$(awk <log '/^Saving to:/{print substr($0,13,length($0)-14)}')
...

또는 원하는 경우 다음을 수행하여 리디렉션에서 파일 이름을 얻을 수 있습니다.

wget -S --max-redirect=0 ...

파일을 검색하지는 않지만 stderr에 새 위치가 표시됩니다.

Location: https://download-installer.cdn.mozilla.net/pub/firefox/nightly/latest-mozilla-aurora-l10n/firefox-50.0a2.fr.linux-x86_64.tar.bz2

그런 다음 파일 이름을 추출할 수 있습니다.

관련 정보