巨大なフォルダを分割しました:
$ 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
- 圧縮していないので、対象ファイルに名前を付けないでください
somedir.tar.gz
。somedir.tar
- これはあなたの問題とは実際には関係ありませんが、
tar xvf
それでも動作するはずです
- これはあなたの問題とは実際には関係ありませんが、
- 転送(特にFTP経由の場合)がバイナリ転送(テキスト転送ではない)であることを再度確認してください。
- 最後に、ファイルが正しく転送されたかどうかを確認してください。
- このためには、ソース側とターゲット側のファイルサイズを確認する必要がある。
- あるいは、さらに良い方法として、両側の 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
。