問題:tar.gzファイルを1つのステップで抽出できるようにしたいと思います。これにより、私の質問はこれとほとんど同じになります: tar-gzのスタックオーバーフローの質問 。
私の質問はほぼ同じですが、同じではありません。バットファイル内で7-Zipコマンドライン(または類似のもの)を使用してWindowsでこれを実行したいので、またはRuby/Perl/Pythonスクリプト。
質問:この一見単純なタスクは、最初の外観よりも複雑であることがわかります。既にこれを行うスクリプトを誰かが持っていますか?
7z e example.tar.gz && 7z x example.tar
使用する &&
2つのコマンドを1つのステップで結合します。 7-Zipポータブルを使用します(7z.exeと7z.dllのみが必要です)。
古い質問ですが、今日は苦労していたので、ここに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"'
tarのwin32ポート を使用します。
tar -xvfz filename.tar.gz
7-Zipまたは類似のものを要求したので、私はあなたの正確なユースケース用に書かれた代替ツールを提供しています。
tartoolユーティリティ は、.NET SharpZipLibライブラリを使用して構築された無料のオープンソースツールです。
.tar.gz
/.tgz
-ファイルを抽出するコマンド例
C:\>TarTool.exe D:\sample.tar.gz ./
免責事項:私はこのユーティリティの作者です。