私はLinuxのコマンドラインのパイプを知りません。
私は以下を見つけました:
ll - R | grep *.pdf
次に終わるファイルがリストされます。 .pdf
しかし、
locate *.pdf | du -h
.で終わるファイルはサイズに含まれません.pdf
。代わりに、現在のディレクトリのファイルサイズを一覧表示します。
ここで何の問題がありますか?
私の考えでは、最初のコマンドの出力は次のコマンドの入力です。
答え1
パイプは、あるプログラムの出力を別のプログラムの入力に送信するように動作します。これは、他のプログラムの出力を受け取るプログラムが読み取り可能でなければならないことを意味しますSTDIN
(標準ストリーム)。
この場合、出力は設計された方法なのでgrep
読み取ることができます。実行するディレクトリを指すコマンドライン引数が必要です(ディレクトリが指定されていない場合、デフォルトは現在の作業ディレクトリになります)。ll
du
./
.pdf
ファイルサイズを確認するには、すべてのファイルがディレクトリにある場合、またはdu -h -d1 /path/to/pdf/dir
を実行できますlocate *.pdf | xargs | du -h
。異なるディレクトリにある場合と-exec
を一緒に使用する必要がありますfind
(他のユーザーが助けることができますが、どうすればよいかわかりません)。
答え2
私の考えでは、最初のコマンドの出力は次のコマンドの入力です。
いいですね。しかし、2つの例では、違いはgrep
入力ではなくdu
入力に応じて動作することです。最初のコマンドが次に進む場合にのみ標準出力で2番目標準入力、この場合、両方のストリームは「パイプ」を介して接続されます。コマンドマニュアルページで「標準入力」と「標準出力」を探して、これが可能かどうかを確認できます。