나는 종종 sourceforge.net에서 wget으로 tarball을 다운로드합니다.
다운로드 된 파일의 이름은 다음과 같습니다. SQliteManager-1.2.4.tar.gz?r=http:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F&ts=1305711521&use_mirror=switch
내가하려고 할 때
tar xzf SQliteManager-1.2.4.tar.gz\?r\=http\:%2F%2Fsourceforge.net%2Fprojects%2Fsqlitemanager%2Ffiles%2F\&ts\=1305711521\&use_mirror\=switch
다음과 같은 오류 메시지가 나타납니다.
tar (child): Cannot connect to SQliteManager-1.2.4.tar.gz?r=http: resolve failed
gzip: stdin: unexpected end of file
tar: Child returned status 128
tar: Error is not recoverable: exiting now
파일 이름을 foo.tar.gz추출로 바꾸면 완벽하게 작동합니다.
추출하기 전에 대상 파일을 이름을 바꿀 때마다 강제로 이름을 바꾸지 않는 방법이 있습니까?
답변
보고있는 오류의 이유는 GNU tar 설명서 에서 찾을 수 있습니다 .
아카이브 파일 이름에 콜론 ( ‘:’)이 포함되어 있으면 다른 머신의 파일 인 것으로 간주됩니다 […]
즉, SQliteManager-1.2.4.tar.gz?r=http호스트 이름으로 해석 하여 IP 주소로 해석하려고하므로 “해결 실패”오류입니다.
똑같은 문서는 다음과 같이 말합니다.
이름에 콜론이 포함 된 파일을 사용해야하는 경우 ‘–force-local’옵션을 사용하여 원격 테이프 드라이브 동작을 억제 할 수 있습니다.
답변
로 다운로드 할 때 옵션으로 wget출력 파일 이름을 지정하십시오 -O.
wget "http://domain.com/file.tgz?crazy=args&stuff=todelete" -O file.tgz
그러면 파일이 지정된 파일 이름으로 저장되어 문제가 발생하거나 이름이 변경됩니다. 그리고 당신은 sourcefourge가 url 매개 변수가 첨부 된 파일을 전달하기에 너무 멍청하지 않기를 바라는 유일한 사람이 아닙니다.
답변
를 사용하여 다운로드
wget --trust-server-names URL
그렇게하면 wget은 올바른 파일 이름으로 저장합니다. 기본적으로 URL의 마지막 구성 요소를 사용합니다
예를 들어
wget --trust-server-names http://sourceforge.net/projects/sqlitemanager/files/sqlitemanager/1.2.4/SQliteManager-1.2.4.tar.gz/download
답변
위에서 언급했듯이 :(열) tar은 원격 파일이라고 생각합니다. 따라서 우리는 그것이 사실이라는 사실을 강요해야합니다.
실패
$ tar czf "back$(date -u +"%H:%M").tar.gz" ./
tar (child): Cannot connect to back10: resolve failed
tar: Child returned status 128
tar: Error is not recoverable: exiting now
해결책
./(현재 디렉토리) 를 추가 하고 올바르게 인용 하여 로컬 파일이라는 사실을 명시하십시오 .
$ tar czf ./"back$(date -u +'%H:%M').tar.gz" ./
tar: .: file changed as we read it
경고는 소스 디렉토리에서 작성 중이기 때문입니다.
답변
이미 다운로드 한 파일의 경우 다음과 같이 작동합니다.
tar xzf - < SQliteManager-1.2.4.tar.gz*