7 -zipファイルを「静かに」抽出 - コマンドラインオプション

StackOverflow https://stackoverflow.com/questions/3774278

  •  04-10-2019
  •  | 
  •  

質問

抽出したい 7-zip Pythonスクリプトのアーカイブ。抽出の詳細を吐き出すことを除いて、それは正常に動作します(私の場合は巨大です)。

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

私の命令はです

7z.exe -o some_dir x some_archive.7z
役に立ちましたか?

解決

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

他のヒント

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

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

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

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

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

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

彼らが言ったように、あなたが使用できる画面充填メッセージのほとんどを非表示にするために... some_archive.7z | /v「圧縮」を検索しますが、「find」は、その単語のあるエラーメッセージも削除します。あなたは警告されません。新しい7-zipバージョンのために、その「Find」も変更する必要がある場合があります。

7-zipには、強制冗長出力、サイレンスモードなし、stderrとstdout(*)を組み合わせ、Unix許可などを節約しません。これらの反スタンダード行動は一緒になって、「7-zip」を悪い場所に置きます。たとえば、「tar+bzip2」または「zip」。

(*)「Upstreem(Igor Pavlov)は、何度かそうするように頼まれているにもかかわらず、メッセージのさまざまな出力を作成したくありません:(」 http://us.generation-nt.com/answer/bug-346463-p7zip-stdout-stderr-help-166693561.html - 「イゴール・パブロフはこの動作を変えたくない」 http://sourceforge.net/tracker/?func=detail&aid=1075294&group_id=111810&atid=660493

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

1つの可能性はPopenで子プロセスを生成することです。そのため、その出力は親に戻って処理/表示されるか(必要に応じて)、または完全に無視されます(stdout = pipeとstderr = pipeでPopenオブジェクトを作成します。子供から出力を取得するため)。

それ以外の場合はこれを試してみてください:

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

@matthewの答えとこの答えを拡大します https://superuser.com/questions/194659/how-to-disable-the-output-of-7-zip検索の代わりにFindSTRを使用しているので、複数の行をチェーンして除外して空白を除外できます。

7za.exe a test1.zip .\foldertozip | FINDSTR /V /R /C:"^Compressing  " /C:"Igor Pavlov" /C:"^Scanning$" /C:"^$" /C:"^Everything is Ok$"
  • /v:除外
  • /R:正規表現
  • /C:「^圧縮」:ラインの開始、圧縮、2つのスペース
  • /c: "^Scanning $":単語は独自にラインでスキャンします(開始/終了)
  • /c: "^$":その間に何もなしに開始と終了、すなわち、空白行

スペースがスペースになるように /cを使用しています。そうでなければ、この単純なバージョンのように、複数の単語の間のセパレーターです。

FINDSTR /V "Compressing Pavlov Scanning Everytyhing"

(新しいバージョンで文言が変更された場合、または有用な行が「圧縮」という単語から始まる場合、同じ警告が存在します。予想どおりに機能しません)。

| FIND 重要でないテキストを表示せずに何が起こったかを示すための良い代替手段です。

PowerShellから7-Zip.exeを実行していて、エラーだけを見たい場合は、次のようなことを試すことができます。

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

これにより、「エラー」メッセージ行と周囲の10行(または任意の数値)が表示され、エラー固有の出力がキャプチャされます。

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

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

NUL (Windows)はおそらく1つの解決策です。

7-zip.exe -o some_dir x some_archive.7z>NUL

-yスイッチを使用して、7 -zipがプロンプトを表示するのを停止できます。これにより、すべてのプロンプトに「はい」と答えます。自信があるときにのみこれを使用してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top