web-dev-qa-db-ja.com

プログラムでtar.gzを1ステップで抽出します(7-Zipを使用するWindowsの場合)

問題:tar.gzファイルを1つのステップで抽出できるようにしたいと思います。これにより、私の質問はこれとほとんど同じになります: tar-gzのスタックオーバーフローの質問

私の質問はほぼ同じですが、同じではありません。バットファイル内で7-Zipコマンドライン(または類似のもの)を使用してWindowsでこれを実行したいので、またはRuby/Perl/Pythonスクリプト。

質問:この一見単純なタスクは、最初の外観よりも複雑であることがわかります。既にこれを行うスクリプトを誰かが持っていますか?

35
dreftymac
7z e example.tar.gz  && 7z x example.tar

使用する && 2つのコマンドを1つのステップで結合します。 7-Zipポータブルを使用します(7z.exeと7z.dllのみが必要です)。

30
svandragt

古い質問ですが、今日は苦労していたので、ここに2cがあります。 7Zipコマンドラインツール "7z.exe"(私はv9.22をインストールしています)はstdoutに書き込み、stdinから読み取ることができるため、パイプを使用して中間tarファイルなしで実行できます。

7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"

どこ:

x     = Extract with full paths command
-so   = write to stdout switch
-si   = read from stdin switch
-aoa  = Overwrite all existing files without Prompt.
-ttar = Treat the stdin byte stream as a TAR file
-o    = output directory

コマンドラインコマンドとスイッチの詳細については、インストールディレクトリのヘルプファイル(7-Zip.chm)を参照してください。

As noted by @ zespri powershellは2番目の7zプロセスへの入力をバッファリングするため、tarファイルが大きい場合、大量のメモリを消費する可能性があります。つまり:

& 7z x "somename.tar.gz" -so  | & 7z x -aoa -si -ttar -o"somename"

this SO answer からの回避策は、これをPowerShellから実行する場合は、コマンドをcmd.exeに渡すことです。

& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'
83
user2856

tarのwin32ポート を使用します。

tar -xvfz filename.tar.gz
13
Byron Whitlock

7-Zipまたは類似のものを要求したので、私はあなたの正確なユースケース用に書かれた代替ツールを提供しています。

tartoolユーティリティ は、.NET SharpZipLibライブラリを使用して構築された無料のオープンソースツールです。

.tar.gz/.tgz-ファイルを抽出するコマンド例

C:\>TarTool.exe D:\sample.tar.gz ./

免責事項:私はこのユーティリティの作者です。

8
senthil