フラットディレクトリ7zファイルにファイルを追加する7zコマンドライン

フラットディレクトリ7zファイルにファイルを追加する7zコマンドライン

「./data/x.txt」ファイルを「./data/x.7z」パスに圧縮したいと思います。

走っている間

7z a ./data/x.txt.7z ./data/x.txt

「./data/x.txt」ファイルを保存します。

data/x.txt

そして(私が欲しいもの)だけでなく

x.txt

ただし、7zはx.7zファイル内の "./data"ディレクトリパスを無視したいと思います。明確にするために、x.txtを追加するときに7zは7zファイルのディレクトリ構造を平坦化したいと思います。

可能ですか?

答え1

考えられる解決策の1つは、圧縮する前にいくつかのディレクトリでchdirを実行することです。たとえば、

$ cd data; 7z a ../test.7z *
$ 7z l ../test.7z
...

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2011-02-18 15:29:53 ....A            6           11  x.txt
------------------- ----- ------------ ------------  ------------------------
...

別の方法には、他のアーカイバ(例:rar便利なコマンドラインスイッチがたくさんあります。)次のオプションを使用して問題を解決できます-ep/-ep1

$ rar a -ep test.rar data

または

$ rar a -ep1 test.rar data

ヘルプセクションrar:

  ep            Exclude paths from names
  ep1           Exclude base directory from names

答え2

私に合った代替案を見つけました。私は利点を取っていますサブプロセス7zを押します。 cwd 属性は、子プロセスコマンドの作業ディレクトリを変更します。以下のコードは上記の例を解決します。ここで、「data」はファイルを追加したいパスです。

args = [
        '7z',
        'a',
        filename_7z,
        filename,
        ]
output = subprocess.check_output(args, cwd = 'data').decode("utf-8")

答え3

dr01の答えは一般的に正確ですが、単一のファイルを圧縮するために7zを使用するのはなぜですか?

ぜひご覧ください。xzまたは多分pxz、あなたのディストリビューションで利用可能な場合。 xzではうまくいきますtar。最新バージョンのtarには、次のように動作する「-J」スイッチがあります。xz

とにかく、orをxz使用しているかのように単一のファイルを圧縮できます。gzipbzip2

$ xz file.txt

(ファイル生成file.txt.xz

関連情報