パイプを介して値を渡す

パイプを介して値を渡す

私はLinuxのコマンドラインのパイプを知りません。

私は以下を見つけました:

ll - R | grep *.pdf

次に終わるファイルがリストされます。 .pdf

しかし、

locate *.pdf | du -h

.で終わるファイルはサイズに含まれません.pdf。代わりに、現在のディレクトリのファイルサイズを一覧表示します。

ここで何の問題がありますか?

私の考えでは、最初のコマンドの出力は次のコマンドの入力です。

答え1

パイプは、あるプログラムの出力を別のプログラムの入力に送信するように動作します。これは、他のプログラムの出力を受け取るプログラムが読み取り可能でなければならないことを意味しますSTDIN標準ストリーム)。

この場合、出力は設計された方法なのでgrep読み取ることができます。実行するディレクトリを指すコマンドライン引数が必要です(ディレクトリが指定されていない場合、デフォルトは現在の作業ディレクトリになります)。lldu./

.pdfファイルサイズを確認するには、すべてのファイルがディレクトリにある場合、またはdu -h -d1 /path/to/pdf/dirを実行できますlocate *.pdf | xargs | du -h。異なるディレクトリにある場合と-execを一緒に使用する必要がありますfind(他のユーザーが助けることができますが、どうすればよいかわかりません)。

答え2

私の考えでは、最初のコマンドの出力は次のコマンドの入力です。

いいですね。しかし、2つの例では、違いはgrep入力ではなくdu入力に応じて動作することです。最初のコマンドが次に進む場合にのみ標準出力で2番目標準入力、この場合、両方のストリームは「パイプ」を介して接続されます。コマンドマニュアルページで「標準入力」と「標準出力」を探して、これが可能かどうかを確認できます。

関連情報