UNIX/Linuxの部屋 Teeコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド Tee tee の進化版 このエントリーをはてなブックマークに追加

tee は
% command | tee out.txt
などと使用して、command の出力を out.txt に表示しつつ、端末にも出力するコマンド。この tee をより便利にしたのが Tee コマンドである。

tee では「標準出力とファイル」にしか出力を流し込めないが、Tee はパイプ経由で他のコマンドの標準入力宛に出力することができる。
% find . -name hoge\*
⇒ ファイル名が hoge から始まるファイル名を表示
% find . -name hoge\* | Tee "| wc -l"
⇒ ファイル名が hoge から始まるファイル名を表示しつつ、ファイル数 (行数) をカウント
複数のコマンドにデータを流し込むこともできる。
% find . -name hoge\* | Tee "| wc -l" "| mail foo@example.com"
⇒ ファイル名が hoge から始まるファイル名を表示しつつ、ファイル数 (行数) をカウントしつつ、find の結果をメールで送信する。
% find . -name hoge\* | Tee "| wc -l" "| grep html | wc -l"
⇒ ファイル名が hoge から始まるファイル名を表示しつつ、ファイル数をカウントしつつ、ファイル名に html を含むファイルのファイル数をカウントする。
コマンドの結果をファイルに出力することも可能。
% Tee '| head -5 > head.txt' '| tail -5 > tail.txt' < file.txt
⇒ file.txt の内容を表示しつつ、先頭 5行を head.txt に、末尾 5行を tail.txt に出力する。
% ls -l | awk '{print $5,$9}' | sort -nr | Tee '| awk "{sum+=\$1} END{print sum}"'
⇒ カレントディレクトリのファイルの、ファイルサイズとファイルサイズとファイル名をファイルサイズ順に表示しつつ、全ファイルの合計値を出力する。
出力例:
684690 a.txt
641327 b.html
86012 file.txt
512 dir
1691518 (この行が合計値)
% ls -l | awk '{print $5,$9}' | Tee '| sort -nr | head >/dev/tty' '| awk "{sum+=\$1} END{print sum}">/dev/tty' > /dev/null
⇒ ファイルサイズ順に 10件だけ表示しつつ、全ファイルの合計値を出力する。標準出力への出力を抑止する方法はないようなので、全体を /dev/null に捨て、個別のコマンドで /dev/tty に出力してみた。
非常に検索しづらいので、オリジナルと似たような名前を付けるのはやめましょう。