find path -option [-print] [-exec -ok command] {} \; find命令的參數: pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。 -print: find命令將匹配的文件輸出到標准輸出。 -exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為'command' { } \;,注意{ }和\;之間的空格。 -ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。 #-print 將查找到的文件輸出到標准輸出 #-exec command {} \; —–將查到的文件執行command操作,{} 和 \;之間有空格 #-ok 和-exec相同,只不過在操作前要詢用戶
1、根據文件名或正則表達式匹配搜索
選項-name的參數指定文件名所必須匹配的字符串。 例:匹配所有以.txt結尾的文件名 $find /root/ -name "*.txt" -print 選項-iname,該選項的作用和-name類似,不過匹配的時候忽略名字的大小寫。 匹配多個條件,可以使用OR條件操作 $find . /root/ \( -name "*.txt" -o -name "*.pdf" \) -print 選項-path的參數可以使用通配符來匹配文件路徑或文件。 $find . -path "*include/apu*" ./httpd-2.2.22/srclib/apr-util/include/apu_version.h ./httpd-2.2.22/srclib/apr-util/include/apu.hw ./httpd-2.2.22/srclib/apr-util/include/apu_errno.h ./httpd-2.2.22/srclib/apr-util/include/apu.hnw 選項-regex的參數和-path類似,不過-regex是基於正則表達式來匹配文件路徑。 下面命令匹配.py或.sh文件 $find . -regex ".*\(\.py\|\.ssh\)$" ./.ssh ./httpd-2.2.22/srclib/apr/build/gen-build.py
2、否定參數 find也可以使用"!"否定參數的含義。 例如:匹配所有不是以.txt結尾的文件名 $find . ! -name "*.txt"
3、基於目錄的深度搜索 使用-maxdepth和-mindepth參數來限制find命令遍歷目錄的深度。 例:列出當前目錄下的所有普通文件。 $find . -maxdepth 1 -type f -maxdepth和-mindepth應當作為find的第三個參數出現,如果作為第四個或之後的參數,則會影響find的效率。
4、根據文件的類型搜索 使用-type對文件搜索進行過濾,以下是type參數對應文件的類型 普通文件 f、符號文件 l、目錄 d、字符設備 c、塊設備 b、套接字 s、Fifo p。 例:列出所有目錄 $find . -type d -print
5、根據文件時間進行搜索 系統每個文件有三種時間戳,如下所示: 訪問時間(-atime):用戶最近一次訪問時間 修改時間(-mtime):文件內容最後一次修改時間。 變化時間(-ctime):文件元數據(例如權限或所有權)最後一次改變時間 打印出最近7天有過訪問的所有文件 $find . type f -atime -7 print 打印出訪問時間超過7分鐘的所有文件 $find . type f -admin -7 print
6、基於文件大小的搜索 $find . -type f -size +20k #大於20KB的文件 $find . -type f -size -20k #小於20KB的文件 $find . -type f -size 20k #等於20KB的文件
7、刪除匹配的文件 -delete可以刪除find查找到的.swp文件 $find . -type f -name "*.swp" -delete 刪除當前目錄下的所有的.swp文件
8、基於文件權限和所有權的匹配 例:打印出權限為644的文件 $find . -type f -perm 644 -print 查找沒有執行權限的PHP文件 $find . -type f -name "*.php" ! -perm 644 -print 打印出用戶slynux所擁有的文件: $find . -type f -user slynux -print
9、結合find執行命令或動作 借助選項-exec與其他命令結合。 示例: #find . -type f -user mysql -exec chown root {} \; 在當前目錄下修改屬於用戶mysql的文件為屬於root用戶。 #find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \; 將10天前的.txt文件復制到OLD目錄下
10、find跳過特定的目錄 打印出不包過在.svn的目錄的所有文件的名稱 #find . \( -name ".svn" -prune \) -o \( -type f -print\)