
他の人のコードベースで作業するときによく使うコマンドがあります。例を挙げます。
find ./ -name "*.php" | xargs grep "my_awesome_function("
私はすでにfind
、、、、の それぞれのコマンドのドキュメントを読みましたpipe
。xargs
grep
http://www.computerhope.com/unix.htm
しかし、このコマンドが現在のディレクトリからすべての PHP ファイルを検索し、そのうちのどれに文字列「my_awesome_function()」が含まれているかを検索する仕組みがまだ完全には理解できません。パイプ前の部分の動作は理解できますが、パイプの後は理解できません。各ファイルが grep コマンドへの引数のように送信されることは理解していますが、ここで何が起こっているのか説明してくれる人はいますか?
答え1
find
最後の部分を除いてコマンドを実行してみてください:
find ./ -name "*.php"
表示されるのは、すべて で終わるファイル名のリストです.php
。
コマンドxarg
はパイプからこれらのファイル名をすべて読み取り、それらの束(オプション を使ってその数を設定できます)を取得し、それらの名前で引数を呼び出します。したがって、findの出力が で、最大2つのファイルをグループ化する-n 2
場合(または で強制する場合)、次のように呼び出されます。file1.php file2.php file3.php
xarg
xargs -n 2
grep "my_awesome_function(" file1.php file2.php
grep "my_awesome_function(" file3.php
これにより、出力が生成されます。 を挿入すると、実際に何が起こっているかを確認できますecho
。
find ./ -name "*.php" | xargs echo grep "my_awesome_function("
グループ化も試してみてください:
find ./ -name "*.php" | xargs -n 2 echo grep "my_awesome_function("