태그 보관물: shell

shell

타르 추출은 파일 이름에 의존합니까? 같은 오류 메시지가 나타납니다. tar (child): Cannot

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


답변