LinuxでTeeとXargsを使用して標準入力からコマンドを実行する方法


コマンドラインを使用している間は、1つのプログラムの出力(システム情報や統計情報を生成するツールなど)を別のプログラムの入力として直接渡すことができます(テキストフィルタリング、grep、sed、awkなどのパターン検索ツールなど)。パイプラインを使用して、さらなる処理のために)。

コマンドラインを構築するためにパイプラインで使用できる2つの最も重要なコマンドラインユーティリティは次のとおりです。

  • xargs – reads streams of data from standard input, then generates and executes command lines.
  • tee – reads from standard input and writes simultaneously to standard output and one or many files. It’s more of a redirection command.

この簡単な記事では、Linuxでパイプ tee 、および xargs コマンドを使用して標準入力から複数のコマンドを作成して実行する方法について説明します。

パイプを使用するための最も簡単な構文は、Linuxのチュートリアルの多くのコマンドですでに見たことがあるかもしれませんが、以下のとおりです。しかし、いくつかのコマンドを使ってもっと長いコマンドラインを作ることができます。

$ command1 args | command2 args 
OR
# command1 args | command2 args | command3 args ...

以下は、dmesgコマンドの出力をheadコマンドに渡すためのパイプラインの使用例です。

$ dmesg | head

xargsを使用してコマンドを実行する方法

この例では、2番目のコマンドは、xargsを使用して複数行の出力を1行に変換します。

$ ls -1 *.sh
$ ls -1 *.sh | xargs

リスト内の各ファイルの行/単語/文字数を数えるには、以下のコマンドを使用してください。

$ ls *.sh | xargs wc -l	    #count number of lines in each file
$ ls *.sh | xargs wc -w	    #count number of words in each file
$ ls *.sh | xargs wc -c	    #count number of characters in each file
$ ls *.sh | xargs wc	    #count lines, words and characters in each file

以下のコマンドは、カレントディレクトリ内の All という名前のディレクトリを見つけて再帰的に削除します。

$ find . -name "All" -type d -print0 | xargs  -0 /bin/rm -rf "{}"

オプション -print0 アクションを指定したfindコマンドは、標準出力へのフルディレクトリパスの印刷を有効にし、その後にヌル文字と -0 xargs フラグが続き、ファイル名のスペースを扱います。

他の実用的な xargsコマンドの使用例は、次の記事にあります。

  1. How to Copy a File to Multiple Directories in Linux
  2. Rename All Files and Directory Names to Lowercase in Linux
  3. 4 Ways to Batch Convert Your PNG to JPG and Vice-Versa
  4. 3 Ways to Delete All Files in a Directory Except One or Few Files with Extensions

LinuxでコマンドでTeeを使用する方法

この例は、コマンド出力を標準出力に送信してファイルに保存する方法を示しています。以下のコマンドを使用すると、Linuxで最大のメモリ使用量とCPU使用率で、最も実行中のプロセスを表示できます。

$ ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head | tee topprocs.txt
$ cat  topprocs.txt

既存のファイルにデータを追加するには、 -a フラグを渡します。

$ ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head | tee -a topprocs.txt 

詳細な情報は tee および xargs のmanページにあります。

$ man xargs
$ man tee

それで全部です!私たちの特別な記事をチェックすることを忘れないでください。

この記事では、パイプラインを使用してコマンドラインを生成する方法について説明しました。 xargsとteeコマンド下記のフィードバックフォームから質問をしたり、考えを共有したりできます。