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.gzsomedir.tar
    • これはあなたの問題とは実際には関係ありませんが、tar xvfそれでも動作するはずです
  2. 転送(特にFTP経由の場合)がバイナリ転送(テキスト転送ではない)であることを再度確認してください。
  3. 最後に、ファイルが正しく転送されたかどうかを確認してください。
    • このためには、ソース側とターゲット側のファイルサイズを確認する必要がある。
    • あるいは、さらに良い方法として、両側の MD5 サムを一致させます (これによりポイント 2 もチェックされます)

上記の点を確認し、両端の MD5 サムが一致する場合は、まず分割を確認する必要があります。それでは、ソース マシンで結合と tar-tf は機能しますか?

が非常に大きい場合はsomedir、小さなディレクトリでワークフローを試してください。まず、
を使用してtar cvpf単純な tarball を取得し、分割して再結合後にテストします。
次に、分割したものを前と同じようにターゲット マシンにコピーし、そこで再結合後にテストします。
これにより、問題の特定が速くなります。

答え2

連結したtarballに名前を付けないでくださいsomefile.tar.gzない圧縮されています。 の圧縮自動検出を混乱させないようにするにはtar、 という名前を付ける必要がありますsomefile.tar

情報マニュアルから引用tar:

フォーマット認識アルゴリズムは、ファイルの先頭にある特定の圧縮フォーマットに固有の特別なバイト シーケンスである「署名」に基づいています。このアプローチが失敗した場合、`tar' はアーカイブ名のサフィックスを使用してフォーマットを決定します...

つまり、おそらく tarball が既知の圧縮方法の署名のいずれでも始まって​​いないため、tar圧縮を決定するためにファイル名を使用することになります。あなたの場合、名前は で終わるため.gz、圧縮されていると想定されますgzip。ファイルが実際には圧縮されていないため、このエラーが発生します。

tl;dr: tarball の名前には.tar、 ではなく、サフィックスを付けます.tar.gz

関連情報