如何提取“X1 存档”?

如何提取“X1 存档”?

我有一个没有文件扩展名的奇怪文件,据说是 git 存储库内容的存档。根据file (1),这是一个“X1 存档”:

$ file my_git_repo 
my_git_repo: X1 archive data

但是,我无法找到任何方法来提取或查看该文件的内容。我试过了:

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

但这些工具都无法识别我的文件。我也尝试过查看维基百科拱门维基寻求帮助,但这些页面都没有提到“X1”。我还尝试过在谷歌上搜索“X1 archive”或“extract X1 file”的变体,但主要得到的是名为“X1”的产品或服务的结果,并且似乎没有与名为“X1”的文件格式相关的结果。最后,我尝试使用诸如 之类的工具查看该文件strings,该文件确实包含我期望在 git 存储库中的文件的文件名以及该存储库中文件的片段,所以我认为该文件不是只是随机数据或类似的数据。

我有什么类型的文件以及如何查看其内容?

答案1

好吧,我已经弄清楚了这一点。

我注意到文件的第一行包含一个奇怪的字符串:

% 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 和 stderr 而不仅仅是 stdout,这可以解释该文件的第一行是如何产生的。

因此,如果我删除该文件的第一行,我会得到更合理的输出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 存档”的想法,但我猜测这与“X1”是损坏文件的前两个字符有关。

相关内容