38

問題: tar.gz ファイルを 1 ステップで抽出できるようにしたいと考えています。これにより、私の質問は次の質問とほぼ 同じになります: Stack Overflow question for tar-gz

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

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

4

5 に答える 5

85

古い質問ですが、今日は苦労していたので、ここに私の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) を参照してください。

@zespriで指摘されているように、 powershellは入力を 2 番目の 7z プロセスにバッファリングするため、tar ファイルが大きい場合は多くのメモリを消費する可能性があります。すなわち:

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

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

& cmd.exe '/C 7z x "somename.tar.gz" -so | 7z x -aoa -si -ttar -o"somename"'
于 2013-02-05T03:21:42.227 に答える
34
7z e example.tar.gz  && 7z x example.tar

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

于 2010-05-25T09:45:12.753 に答える
13

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

tar -xvfz filename.tar.gz
于 2009-08-31T23:06:43.703 に答える
8

7-zip などを求められたので、正確なユース ケース用に作成された代替ツールを提供します。

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

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

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

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

于 2012-09-07T15:55:19.800 に答える