많은 웹사이트에서는 최신 버전의 바이너리를 얻기 위해 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
그런 다음 파일 이름을 추출할 수 있습니다.