web-dev-qa-db-ja.com

「X1アーカイブ」を抽出するにはどうすればよいですか?

おそらくgitリポジトリのコンテンツのアーカイブであるファイル拡張子のない奇妙なファイルがあります。 file (1)によると、これは「X1アーカイブ」です。

$ file my_git_repo 
my_git_repo: X1 archive data

ただし、このファイルの内容を抽出または表示する方法がわかりません。私はもう試した:

  • tar
  • unzip
  • bzip2
  • xz
  • lzip
  • lzma
  • lzop
  • gzip
  • uncompress

しかし、これらのツールはどれも私のファイルを認識しません。 WikipediaArch Wiki も調べてみましたが、どちらのページにも「X1」については触れられていません。 「X1アーカイブ」または「X1ファイルの抽出」のグーグルバリエーションも試しましたが、主に「X1」という名前の製品またはサービスの結果が得られ、「X1」というファイル形式に関連しているようには見えませんでした。最後に、stringsなどのツールを使用してファイルを調べてみましたが、ファイルにはgitリポジトリにあると予想されるファイルのファイル名と、そのリポジトリ内のファイルのスニペットが含まれているので、このファイルは単なるランダムデータなどとは思わないでください。

どのような種類のファイルがあり、その内容をどのように表示できますか?

3
jayhendren

さて、私はこれを理解しました。

ファイルの最初の行に奇妙な文字列が含まれていることに気づきました。

_% head -n 1 my_git_repo | strings
X11 forwarding request failed on channel 0
_

その文字列は見覚えがあります。私のデフォルトのSSH構成はX11接続を転送しようとしますが、転送に失敗した場合(ssh経由でgitサーバーにgit操作を実行した場合など)、その文字列はstderrに出力されます。

_$ git archive --remote=ssh://[email protected]/my_git_repo.git master > my_git_repo.tar
X11 forwarding request failed on channel 0
_

Gitアーカイブを作成したライブラリは、stdoutだけでなく、stdoutとstderrの両方をキャプチャしたと思います。これは、そのファイルの最初の行がどのようになったかを説明します。

したがって、そのファイルの最初の行を削除すると、file (1)からはるかに合理的な出力が得られます。

_$ tail -n +2 my_git_repo > my_git_repo.edit
$ file my_git_repo.edit 
my_git_repo.edit: Zip archive data, at least v1.0 to extract
_

また、ファイルの名前を_my_git_repo.Zip_に変更し、ファイルの内容を_unzip -l_で表示しようとすると、期待するファイルが含まれていることがわかり、unzipでアーカイブを抽出すると、欲しいファイル。

libmagicが、このファイルが最初から「X1アーカイブ」であると考えた場所はわかりませんが、破損したファイルの最初の2文字が「X1」であることに関係していると思います。

3
jayhendren