it-swarm-ja.com

ターミナル出力をファイルに保存するにはどうすればよいですか?

コマンドの出力をファイルに保存するにはどうすればよいですか?

ソフトウェアを使用しない方法はありますか?方法を知りたいです。

662
led-Zepp

はい、可能です。出力をファイルにリダイレクトするだけです。

SomeCommand > SomeFile.txt  

または、データを追加する場合:

SomeCommand >> SomeFile.txt

必要に応じて stderr を使用してください:

SomeCommand &> SomeFile.txt  

またはこれを追加する:

SomeCommand &>> SomeFile.txt  

stderr と出力の両方が必要な場合ファイルにコンソールに表示されるand useこの:

SomeCommand 2>&1 | tee SomeFile.txt

(出力のみが必要な場合は、上記の2をドロップしてください)

704
Seth

コマンドの出力をファイルに書き込むには、基本的に10の一般的な方法があります。

概要:

構文列のn.e.は「存在しない」ことを意味することに注意してください。
方法はありますが、複雑すぎて列に収まりません。それに関するリストセクションで役に立つリンクを見つけることができます。

          || visible in terminal ||   visible in file   || existing
  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file   
==========++==========+==========++==========+==========++===========
    >     ||    no    |   yes    ||   yes    |    no    || overwrite
    >>    ||    no    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
   2>     ||   yes    |    no    ||    no    |   yes    || overwrite
   2>>    ||   yes    |    no    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
   &>     ||    no    |    no    ||   yes    |   yes    || overwrite
   &>>    ||    no    |    no    ||   yes    |   yes    ||  append
          ||          |          ||          |          ||
 | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite
 | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
|& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite
|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append

リスト:

  • command > output.txt

    標準出力ストリームはファイルのみにリダイレクトされ、端末には表示されません。ファイルが既に存在する場合、上書きされます。

  • command >> output.txt

    標準出力ストリームはファイルのみにリダイレクトされ、端末には表示されません。ファイルが既に存在する場合、新しいデータはファイルの最後に追加されます。

  • command 2> output.txt

    標準エラーストリームはファイルのみにリダイレクトされ、端末には表示されません。ファイルが既に存在する場合、上書きされます。

  • command 2>> output.txt

    標準エラーストリームはファイルのみにリダイレクトされ、端末には表示されません。ファイルが既に存在する場合、新しいデータはファイルの最後に追加されます。

  • command &> output.txt

    標準出力と標準エラーストリームの両方がファイルのみにリダイレクトされ、端末には何も表示されません。ファイルが既に存在する場合、上書きされます。

  • command &>> output.txt

    標準出力と標準エラーストリームの両方がファイルのみにリダイレクトされ、端末には何も表示されません。ファイルがすでに存在する場合、新しいデータはファイルの最後に追加されます。

  • command | tee output.txt

    標準出力ストリームはファイルにコピーされますが、ターミナルでは引き続き表示されます。ファイルが既に存在する場合、上書きされます。

  • command | tee -a output.txt

    標準出力ストリームはファイルにコピーされますが、ターミナルでは引き続き表示されます。ファイルが既に存在する場合、新しいデータはファイルの最後に追加されます。

  • (*)

    Bashには、StdErrのみを2番目のコマンドにパイピングできる短縮構文がありません。ここでは、テーブルを完成させるためにteeと組み合わせて必要になります。そのようなものが本当に必要な場合は、 "stdoutではなくstderrをパイプする方法?"をご覧ください。 on Stack Overflow いくつかの方法でこれを行う方法、たとえばストリームを交換するか、プロセス置換を使用します。

  • command |& tee output.txt

    標準出力と標準エラーストリームの両方が、端末に表示されたままファイルにコピーされます。ファイルが既に存在する場合、上書きされます。

  • command |& tee -a output.txt

    標準出力と標準エラーストリームの両方が、端末に表示されたままファイルにコピーされます。ファイルが既に存在する場合、新しいデータはファイルの最後に追加されます。

833
Byte Commander

teeを使用して、出力をファイルに送信することもできます。

command | tee ~/outputfile.txt

わずかな変更でもstderrがキャッチされます。

command 2>&1 | tee ~/outputfile.txt

またはわずかに短く複雑ではありません:

command |& tee ~/outputfile.txt

teeは、ライブで表示しながらコマンド出力をキャプチャできるようにする場合に便利です。

105
Aaron

コマンド出力をファイルにリダイレクトできます:

your_command >/path/to/file

コマンド出力を上書きする代わりにファイルに追加するには、次を使用します。

your_command >>/path/to/file
20
chaos

考慮すべき機能強化-

さまざまなスクリプトが出力にカラーコードを挿入しますが、ログファイルが乱雑になることは望ましくありません。

これを修正するには、プログラム sed を使用してこれらのコードを取り除きます。例:

command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
14
Sean Huber

cronジョブなどの場合、Bash拡張機能を使用しないでください。同等のPOSIX shリダイレクト演算子は次のとおりです。

Bash          POSIX
------------  --------------
foo &> bar    foo >bar 2>&1
foo &>> bar   foo >>bar 2>&1
foo |& bar    foo 2>&1 | bar

POSIXファシリティは、ある意味でよりシンプルでわかりやすいことがわかります。 &>構文はcshから借用したものであり、これは悪い考えであることをすでに納得させるはずです。

5
tripleee

some_command | tee command.logおよびsome_command > command.logには、command.logファイルにコマンド出力をリアルタイムで保存しないという問題があります。

この問題を回避し、コマンド出力をリアルタイムで保存するには、unbufferパッケージに付属のexpectを追加します。


例:

Sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log

log.pyに以下が含まれていると仮定します。

import time
print('testing')
time.sleep(100) # sleeping for 100 seconds

unbuffer python log.py | tee command.logまたはunbuffer python log.py > command.logを実行できます

詳細: コマンド出力をリアルタイムでファイルに保存するにはどうすればよいですか?

1