web-dev-qa-db-ja.com

「サイレントに」7-Zipファイルを抽出する-コマンドラインオプション

7-Zip アーカイブをPythonスクリプトで抽出します。抽出の詳細(これは私の場合は巨大です)。

抽出中にこの冗長な情報を回避する方法はありますか? 7z.exeへの「サイレント」コマンドラインオプションが見つかりませんでした。

私のコマンドは

7z.exe -o some_dir x some_archive.7z
29
sambha

可能性の1つは、 popen で子プロセスを生成し、その出力が親に戻って処理/表示される(必要な場合)か、完全に無視される(stdout=PIPEおよびstderr=PIPEpopenオブジェクトを作成する)ことです。子から出力を取得できるようにします)。

10
Jerry Coffin

私は同じものを探しているときにこれに出くわしましたが、私はそれを自分で解決しました!コマンドがWindows/DOSで処理されると仮定すると、より簡単な解決策はコマンドを次のように変更することです。

7z.exe -o some_dir x some_archive.7z > nul

つまり、画面ではなくnullファイルに出力を向けます。

または、DOSの「find」コマンドに出力をパイプして、特定のデータのみを出力することもできます。つまり、

7z.exe -o some_dir x some_archive.7z | FIND "ing archive"

これにより、次の出力が生成されます。

アーカイブsome_archive.7zの作成

または

アーカイブsome_archive.7zの更新**


私の最終的な解決策は、コマンドを

... some_archive.7z | FIND /V "ing  "

ダブルスペース 'ing'の後。これにより、次の出力が生成されました。

7-Zip 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Scanning

Updating some_archive.7z


Everything is Ok

これにより、個々のファイル処理が削除されますが、操作の種類に関係なく、操作全体の概要が生成されます。

34
Matthew

@Matthewの答えとこの答えを展開 https://superuser.com/questions/194659/how-to-disable-the-output-of-7-Zip 私は代わりにFINDSTRを使用していますfindのように、複数の行を連鎖させて除外したり、空白行を追加したりできます。

7za.exe a test1.Zip .\foldertozip | FINDSTR /V /R /C:"^Compressing  " /C:"Igor Pavlov" /C:"^Scanning$" /C:"^$" /C:"^Everything is Ok$"
  • / V:除​​外
  • / R:正規表現
  • / C: "^ Compressing":行頭、圧縮、2スペース
  • / C: "^ Scanning $":行上での単独のスキャン(開始/終了)
  • / C: "^ $":間に何もない開始と終了、つまり空白行

/ Cを使用して、スペースをスペースにします。それ以外の場合は、この単純なバージョンのように、除外する複数の単語間の区切り文字になります。

FINDSTR /V "Compressing Pavlov Scanning Everytyhing"

(新しいバージョンで言葉遣いが変わる場合、または「Compressing」という単語で始まる有用な行がある場合、同じ警告が存在し、期待どおりに機能しません)。

3
Thierry_S

7Zipには、コマンドライン抽出用の明示的な「静かな」または「サイレント」モードがありません。

1つの可能性は、popenを使用して子プロセスを生成し、その出力が親に戻って処理/表示される(必要な場合)か、完全に無視される(stdout = PIPEおよびstderr = PIPEでpopenオブジェクトを作成できるようにすることです)子から出力を取得します)。

そうでなければ、これを試してください:

%COMSPEC% /c "%ProgramFiles%\7-Zip\7z.exe" ...
3
Bobb Dizzles

| FINDは、意味のないテキストを表示せずに何が起こったかを示すための優れた代替手段です。

2
bruno777

Powershellから7-Zip.exeを実行していて、エラーのみを表示したい場合は、次のようなものを試すことができます。

7-Zip.exe u <Target> <Source> | Select-String "Error" -Context 10

これは、エラー固有の出力をキャプチャするために、「エラー」メッセージ行と周囲の10行(または任意の数)のみを表示します。

1
Doug J. Huras

7Zipソースを調べると、トリックを実行しているように見える隠し-baスイッチが見つかりました。残念ながら、まだ終わっていません。私はなんとかソースのいくつかの修正でそれを動作させることができましたが、それは単なるハックです。誰かが興味を持っている場合、オプション変数はoptions.EnableHeadersと呼ばれ、CPP/7Zip/UI/Console/Main.cppファイルの変更が必要です。あるいは、7Zipの作者を突いて tracker で機能を完成させることもできます。これにはいくつかのリクエストがあり、そのうちの1つは here です。

0
Fr0sT

7-Zipにはそのようなオプションはありません。さらに、圧縮された各ファイルで印刷された行は、改行なしで同じ場所に表示されることになっており、前の行は消去され、クールな効果があります。残念ながら、一部のコンテキスト(Jenkins ...)では、コンソールにフラッディングする複数の行が生成されました。

NUL(windows)はおそらく1つのソリューションです。

7-Zip.exe -o some_dir x some_archive.7z>NUL
0
Sandburg