tar: 이것은 tar 아카이브처럼 보이지 않습니다.

tar: 이것은 tar 아카이브처럼 보이지 않습니다.

나는 거대한 폴더를 분할했습니다.

$ tar cvpf - somedir | split -b 50000m

… 그런 다음 분할된 파일을 다른 서버로 전송하고 병합했습니다.

$ cat x* > somedir.tar.gz

하지만 파일을 추출하려고 하면 오류가 표시됩니다.

$ tar xvf somedir.tar.gz
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains obsolescent base-64 headers
tar: Error exit delayed from previous errors

다시 폴더로 전송/추출하려면 어떻게 해야 하나요? 감사해요

답변1

  1. 압축하지 않았으므로 대상 파일의 이름을 지정하지 마십시오 somedir.tar.gz. 이름을 지정하십시오.somedir.tar
    • 이것은 실제로 귀하의 문제와 관련이 없습니다. tar xvf그럼에도 불구하고 작동했어야 했습니다.
  2. 전송(특히 FTP를 통한 경우)이 바이너리 전송(텍스트 전송이 아님)인지 다시 확인하세요.
  3. 마지막으로 파일이 실제로 올바르게 전송되었는지 확인하십시오.
    • 이를 위해 소스 및 대상 측 파일 크기를 확인할 수 있습니다
    • 또는 더 나은 방법은 MD5 합계를 양쪽에서 일치시키는 것입니다(이것은 포인트 2도 확인합니다).

위 사항을 확인했고 MD5 합계가 양쪽 끝에서 일치하는 경우 먼저 분할을 확인해야 합니다. 그렇다면 Join 및 tar-tf가 소스 머신에서 작동합니까?

크기가 매우 큰 경우 somedir작은 디렉토리를 사용하여 작업 흐름을 시도해 보십시오. 먼저 간단한 타르볼을 얻고, 다시 결합한 후 분할하고 테스트하는 데
사용합니다 . 이제 이전처럼 분할을 대상 컴퓨터에 복사하고 거기에서 다시 조인한 후 테스트하세요. 이렇게 하면 문제를 찾는 속도가 빨라집니다.tar cvpf

답변2

연결된 tarball의 이름을 지정하지 마십시오 somefile.tar.gz.~ 아니다압축. 의 압축 자동 감지를 혼동하지 않으려면 tar실제로 이름을 지정해야 합니다 somefile.tar.

정보 매뉴얼 에서 인용 tar:

형식 인식 알고리즘은 특정 압축 형식에 특정한 파일 시작 부분의 특수 바이트 시퀀스인 "서명"을 기반으로 합니다. 이 접근 방식이 실패하면 `tar'는 아카이브 이름 접미사를 사용하여 형식을 결정합니다.

따라서 아마도 일어나는 일은 여러분의 타르볼이 알려진 압축 방법의 서명으로 시작하지 않기 때문에 tar파일 이름을 사용하여 압축을 결정하는 것입니다. 귀하의 경우 이름은 으로 끝나므로 압축을 .gz가정합니다 gzip. 파일이 실제로 압축되지 않았기 때문에 오류가 발생합니다.

.tartl;dr: 가 아닌 접미사를 사용하여 tarball의 이름을 지정 하십시오 .tar.gz.

관련 정보