コマンドライン経由で絶対パスを含む Zip ファイル

コマンドライン経由で絶対パスを含む Zip ファイル

Linux でコマンドラインを使用して絶対パスを含むファイルを zip 圧縮する方法はありますか?

絶対パスの zip および tar をチェックする Python プログラムがあり、その機能が動作するかどうかを確認するために zip ファイルを作成したいと考えています。

私は tar を使ってこれをうまく実行できました。また、この答えを求めて Google で広範囲に検索し、zip ドキュメントとマニュアルも確認しましたが、明確な答えは見つかりませんでした。

答え1

$> zip file.zip $PWD/test.txt
adding: path/to/test.txt (deflated 5%)
$> unzip -l file.zip
Archive:  file.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       20  03-11-2019 21:32   path/to/test.txt
---------                     -------
       20                     1 file

そのためのスイッチもあります:

$> zip -jj file.zip test.txt
adding: test.txt (deflated 5%)
$> unzip -l file.zip 
Archive:  file.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       20  03-11-2019 21:32   path/to/test.txt
---------                     -------
       20                     1 files

まったく同じ結果が得られますが、最初からそうすること/はできないのですが、-dオプションを使用して解凍するときにそれを指定できます。

はい!編集です。gz、xz、bzip2 について話しているのではないかと思いました。そうであれば、まずそれらをアーカイブする必要があります。これらには、tar のようなファイルシステムの概念がありません。zip、rar、7z はすべて、そのようなことを行います。

答え2

ZIPファイル形式では、ファイルパスは常に相対的になります。例えば、これ:

  file name: (Variable)

      The name of the file, with optional relative path.
      The path stored should not contain a drive or
      device letter, or a leading slash.  All slashes
      should be forward slashes '/' as opposed to
      backwards slashes '\' for compatibility with Amiga
      and Unix file systems etc.

もちろん、ZIP ファイルにパッチを当てて先頭にスラッシュを強制することは可能ですが、通常のアプリはすべて、そのような明らかなハッキングに対して保護されています(*)。

(*) さらに厄介なハックは、数バイトでエンコードされた、連続した 0 で構成されたほぼ無限の長さのファイルでした。これを解凍すると、マシンがダウンすることがよくあります。すべての ZIP 処理ユーティリティは、これを検出します。

関連情報