find . -type f \( -name "*.java" -o -name "*.xml" \) -not -path "./out/*" -exec grep -irnE 'activity|class' {} +
- 多關鍵詞搜索:使用正則表達式
'pattern1|pattern2'
同時搜索多個關鍵詞(如activity|class
) - 單關鍵詞搜索:支持單個關鍵詞搜索(如
'MainActivity'
),如果你只需要搜一個則'xxxxxx'即可 - 多格式搜索:同時搜索
.java
和.xml
文件(可擴展為.kt
、.gradle
等) 單格式搜索:支持只搜索特定類型的文件(如僅
.xml
)\( -name "*.java" \)即可- 排除特定目錄:通過
-not -path "./out/*"
排除./out
目錄及其子目錄 - 多目錄排除:支持同時排除多個目錄(如
./build
、./.gradle
) - 遞歸搜索:遍歷當前目錄及其所有子目錄
- 僅搜索文件:通過
-type f
參數跳過目錄,只搜索文件】 - 不區分大小寫:通過
-i
參數忽略大小寫差異 - 顯示行號:通過
-n
參數顯示匹配行的行號
命令解析:
文件篩選部分:
find . -type f \( -name "*.java" -o -name "*.xml" \) -not -path "./out/*"
-type f
:僅搜索文件\( -name "*.java" -o -name "*.xml" \)
:篩選.java
或.xml
文件(可根據需要調整)-not -path "./out/*"
:排除./out
目錄及其子目錄
內容搜索部分:
-exec grep -irnE 'activity|class' {} +
-exec ... {} +
:對找到的文件執行 grep 命令-i
:不區分大小寫-r
:遞歸搜索(此處由 find 完成遞歸,grep 僅處理單個文件)-n
:顯示行號-E
:使用擴展正則表達式'activity|class'
:搜索內容(可替換為任意正則表達式,如'pattern1|pattern2'
)
使用示例:
搜索 "MainActivity" 或 "Fragment":
find . -type f \( -name "*.java" -o -name "*.xml" \) -not -path "./out/*" -exec grep -irnE 'MainActivity|Fragment' {} +
僅搜索 .xml 文件中的 "layout":
find . -type f -name "*.xml" -not -path "./out/*" -exec grep -irnE 'layout' {} +
排除多個目錄(如 build 和 .gradle):
find . -type f \( -name "*.java" -o -name "*.xml" \) -not \( -path "./out/*" -o -path "./build/*" -o -path "./.gradle/*" \) -exec grep -irnE 'activity' {} +