終端命令分解功能

終端命令分解功能

我知道在處理別人的程式碼庫時經常使用的命令,這是一個範例

find ./ -name "*.php" | xargs grep "my_awesome_function("

我已經閱讀了這裡每個命令的文檔,如findpipe和from xargsgrephttp://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("

相關內容