나는 종종 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*