【功能】shell
查找文件,可遍歷指定目錄按相應的條件查找所須要的文件安全
【語法】socket
find [查找路徑……] [查找條件] [處理動做]ide
(1)查找路徑工具
默認爲當前目錄,也能夠遍歷整個文件系統oop
運行以下三個 find 命令將獲得相同的結果 — 當前目錄和全部子目錄中的全部文件(包括隱藏文件)的完整清單:性能
#find ui
#find .blog
#find . -print進程
(2)查找條件
1)按文件名查找: -name
支持使用通配符查找:* 、?、[ ]
[舉例]
查找時注意文件名區分大小寫
-iname選項:不區分大小寫進行查找
2)按文件屬主、屬組查找
-user 用戶名
-group 組名
find命令也支持使用uid和gid進行查找
-uid
-gid
find命令也能夠查找「無主(組)」的文件
-nouser (文件的屬主在/etc/passwd中不存在)
-nogroup(文件所屬的組在/etc/group中不存在)
[舉例]
find /var/log -user root -group utmp
3)按文件大小查找
-size [+/-] n[cwbkMG]
+表示大於的意思
-表示等於的意思
文件大小的單位能夠是:
b——數據塊
c——字節
w——雙字節
k——KB
M——MB
G——GB
-empty 文件大小爲0
[舉例]
-size +2M 大於2M的文件
-size -2M 小於2M的文件
-size 2M 2M(1-2M之間的文件都是)
4)按文件類型查找
-type 文件類型
文件類型能夠是:
-f 普通文件
-d 目錄
-b 塊設備
-c 字符設備
-p 命名管道
-l 連接
-s socket文件
[舉例]
find /etc/ -type d
5)按文件時間屬性查找
以天爲單位
1. –mtime [+/- n]——指定時間範圍內文件內容被修改過
2. –ctime [+/- n]——指定時間範圍內文件屬性被修改過
3. –atime [+/- n]——指定時間範圍內文件被讀取或訪問過
以分鐘爲單位
1. –mmin [+/- n]——指定時間範圍內文件內容被修改過
2. –cmin[+/- n]——指定時間範圍內文件屬性被修改過
3. –amin [+/- n]——指定時間範圍內文件被訪問過
理解查找時間
[舉例]
find /var/log/ -type f -mtime +3 #在/var/log目錄下查找3天之前被修改過的文件
find ./ -mmin +5 -mmin 10 #搜索當前目錄下前5分鐘到10分鐘修改過的文件
6)按文件權限查找
-perm 模式,權限模式有如下幾種:
mode:精確匹配
/mode: 任何一位匹配都行
-mode:文件權限能徹底包含mode時纔算匹配
+mode:一種舊的匹配方式,和/mode模式效果同樣,建議使用/mode模式代替
[舉例]
7)組合條件查找
在使用find命令時,也可以使用多個條件組合進行查找,查找條件之間的邏輯關係有如下三種:
與:-a 缺省
?或:-o
非:!,-not(運算優先級最高)
[舉例]
find / -type f -a -name '*.sh'與find / -type f -name '*.sh'效果同樣,都是在整個文件系統中查找以.sh結尾的文件
find /tmp ! -user hadoop -a ! -empty
find /tmp -not \( -user hadoop -o -empty \)
find /tmp ! -user hadoop -o ! -empty
find /tmp ! \( -uesr hadoop -a -empty \)
find / -nouser -o -nogroup
find / \( -perm -2000 -o -perm -4000 \) -ls
8)其餘選項
-depath選項
先匹配全部的文件,再在子目錄中查找
-maxdepth級別
定義find遍歷目錄的層次
-fstype 指定查找的文件系統類型
(3)處理動做
find命令對查找匹配的文件有四個處理動做:
-print:將匹配的文件輸出到標準輸出
-ls:相似ls -l的形式顯示每個文件的詳細信息
-exec command {} \;
對匹配的文件執行相應的shell命令,{}佔位符表明匹配的文件,注意{}和;之間的空格
-ok command {} \;
-ok和-exec的做用相同,只不過以一種更爲安全的模式來執行該參數所給出的shell命令,在執行每個命令以前,都會給出提示,讓用戶來肯定是否執行。
[舉例]
find ./ -type f -size 0 -exec rm {} \;
(4)find命令補充-xargs
xargs 它可以捕獲一個命令的輸出,而後傳遞給另一個命令
在使用 find命令的-exec選項處理匹配到的文件時, find命令將全部匹配到的文件一塊兒傳遞給exec執行。但有些系統對可以傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘以後,就會出現溢出錯誤。錯誤信息一般是「參數列太長」或「參數列溢出」。
這時候就體現出xargs命令的價值了,特別是與find命令一塊兒使用。
find把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是所有,不像-exec選項那樣。這樣它能夠先處理最早獲取的一部分文件,而後是下一批,並如此繼續下去。
在有些系統中,使用-exec選項會爲處理每個匹配到的文件而發起一個相應的進程,並不是將匹配到的文件所有做爲參數一次執行;這樣在有些狀況下就會出現進程過多,系統性能降低的問題,於是效率不高; 而使用xargs命令則只有一個進程。
[舉例]
find ./ -type f -perm -002 | xargs chmod o-w
find /tmp -name core -type f -print | xargs /bin/rm -f