
我知道在處理別人的程式碼庫時經常使用的命令,這是一個範例
find ./ -name "*.php" | xargs grep "my_awesome_function("
我已經閱讀了這裡每個命令的文檔,如find
、pipe
和from
xargs
grep
http://www.computerhope.com/unix.htm
然而我仍然不完全理解這個命令如何從當前目錄向下搜索每個php 文件,然後查找其中哪些文件包含字符串“my_awesome_function(”。我理解預管道部分是如何工作的,但在管道之後我的理解消失了我知道每個文件都像 grep 命令的參數一樣發送,有人可以解釋一下這裡發生了什麼嗎?
答案1
嘗試執行find
不帶最後一部分的命令:
find ./ -name "*.php"
您將看到一個文件名列表,全部以.php
.
現在,xarg
命令從管道中讀取所有這些檔案名,取得一堆檔案名稱(您可以使用 option 設定數量-n 2
),然後使用這些名稱呼叫其參數。因此,如果 find 的輸出是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("