find命令


語法

find [選項] [path...]

選項

選項 含義
-help或--help 在線幫助
-name <pattern> 用shell模式 <pattern>匹配文件名。 
<pattern>可以用引號括起來,也可以不用,但是最好是用引號括起來。
-iname <pattern> 效果與-name類似,但忽略字符大小寫
-ls 列出文件或目錄名稱列表到標准輸出
-exec command ; 執行指令,詳細用法請看下文的-exec command ; 用法說明
-type <c> 只尋找符合指定的文件類型的文件, c這里是一個字符
-prune 如果文件是一個目錄,就不會進入此目錄
-regex <pattern> 用正則表達式匹配文件名,這只是匹配文件的全路徑,不是文件內容。
-regextype <type> 更改在命令行中稍后出現的-regex和-iregex測試所理解的正則表達式語法。
當前實現的<type>是emacs(這是默認的),posix - awk,posix - basic,posix - UNK p和posix - extended。
-print 將文件或目錄名稱列出到標准輸出。格式為每列一個名稱,每個名稱前皆有"./"字符串

示例

列出當前目錄及子目錄下所有文件和文件夾

find .

在當前目錄下查找.java文件

find . -name "*.java"

當前目錄及子目錄下查找所有.java和.cpp文件

find . -name "*.java" -o -name "*.cpp" 
find . \( -name "*.java" -o -name "*.cpp" \)

或者使用正則表達式

find . | egrep ".*(\.java|\.cpp)$" 
find . -regextype "posix-egrep" -regex ".*(\.java|\.cpp)$"

找出當前目錄下不是以.cpp結尾的文件

find . ! -name "*.cpp"

根據文件類型搜索

find . -type <類型參數>

類型參數 含義
f 普通文件
l 符號鏈接
d 目錄
c 字符設備
b 塊設備
s 套接字
p 管道FIFO

刪除匹配文件

find . -type f -name "*.class" -delete

查找當前目錄下所有的.java文件,但是跳過子目錄chapter02

find . -path "./src/com/fireway/util" -prune -o -name "*.java" -print

-exec command ; 的用法說明

-exec選項后面跟隨着所要執行的命令或腳本,然后是一對大括號{},一個空格,一個反斜杠\加上一個分號。因為分號;在bash的環境下是有特殊意義的,因此利用反斜線來跳脫。 
centos7_find_exec

{}花括號代表前面find查找出來的文件名 
示例,顯示

find . -exec ls -l {} \;

示例,刪除

find . -exec rm -rf {} \;

示例,把當前所有的Android.mk文件重命名為Android.mk_bak

find . -name "Android.mk" -exec mv {} {}_bak \;

但是有一點不好的是只能在后面加個后綴。 
示例,如果遇到想把后綴.class修改成.clazz,可以考慮寫一個shell腳本。

for file in $(find . -name "*.class" -type f); do mv ${file} ${file/.class/.clazz}; done 

具體的shell變量怎么替換的可以參考《shell變量詳解》來搞定,這里就不再細寫了。

find結合xargs使用

注意xargs這里是一個單獨的命令,不是find里面的一個選項。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM