文件查找命令find

日期: 2015年08月30日


文件查找:在文件系統上查找符合條件的文件的過程


Linux系統上常用的兩個文件查找工具:

locate:

依賴於實現構建的索引,索引的構建是在系統較爲空閒時自動進行(週期性任務)生成的。

必要時,可手動執行updatedb命令

優點:速度快

缺點:非實時查找、模糊查找

find:

通過遍歷指定的目標目錄,實時查找符合指定實屬性的文件

優點:實時查找、精確匹配

缺點:遍歷文件系統、速度慢



find命令


格式:

find [OPTIONS] [查找路徑] [查找條件] [處理動作]

查找路徑:默認爲當前路徑

查找條件:默認爲指定路徑下的所有文件

處理動作:默認顯示到屏幕



查找條件:

根據文件名查找:

-name  "文件名",文件名支持使用globbing

# find /etc/ -name "passwd*"#在/etc目錄下搜索名爲passwd的文件

-iname  "文件名" 不區分大小寫

-regex 'PATTERN',以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名



根據文件的屬主或屬組查找:

-user USERNAME:  根據文件屬主查找

-group GROUPNAME:  根據文件屬組查找



根據文件的屬主或屬組的ID號查找:

-uid  UID:  根據指定的UID查找

-gid  GID:  根據指定的GID查找



查找沒有屬主或屬組的文件:

-nouser:  查找沒有屬主的文件

-nogroup:  查找沒有屬組的文件



組合查找條件:

組合多個條件查找運用邏輯運算:與、或、非

:-a  查找條件1 -a 查找條件2 -a ... (-a可省略)

所有條件必須同時滿足

# find /tmp/ -nouser -a -name "*centos*"


:-o  查找條件1 -o 查找條件2 -o ...

滿足其中一個條件即可

# find /tmp/ -name "*centos*" -o -uid 500


:-not or !

-not 查找條件不滿足指定條件的(相反)

# find / -not -user root | xargs ls -ld

# find / ! -user root | xargs ls -ld




: 重疊部分:既屬於A,又屬於B

或: A+B-重疊部分(減去與的部分)

非: 除A之外,或除B之外


 

!A  -o !B

=  

!(  A -a B )

!A  -a !B

=  

!( A -o B )

 

 


實例1

//查找/tmp/下非php與非txt結尾的文件

# find /tmp -not -name "*php" -a -not -name"*txt"

 

//查找/tmp/下非php或非txt結尾的文件

# find /tmp -not \( -name "*.php" -o -name"*.txt" \)

 

 

根據文件類型查找:

-type 文件類型

f  普通文件

d  目錄文件

l  符號鏈接文件

b  塊設備

c  字符設備文件

p  命名管道文件

s  套接字文件

 

 

根據文件大小查找:

-size [+|-] #UNIT

常用單位有:k,M,G

不帶+|- 表示精確匹配

 

實例1

 

//查找/etc目錄下2k的文件

#UNIT: #-1 < x <= #

find /etc/ -size 2k -exec ls -lh {} \;

(2k: 匹配範圍是1.1k - 1.9k)

 

//查找/etc目錄下-2k的文件

-#UNIT: x <= #-1

find /etc/ -size -2k -exec ls -lh {} \;

(-2k: 匹配範圍是小於等於1k)

 

//查找/etc目錄下+2k的文件

+#UNIT: x >#

find /etc/ -size +2k -exec ls -lh {} \;

(+2k: 匹配範圍是大於2.1k以上)

 

 

根據時間戳查找:(過去的某個時間節點)

以“天”爲單位

-atime [+|-]#: 根據訪問時間查找

-mtime [+|-]#: 根據修改時間查找

-ctime [+|-]#:  根據改變時間查找

 

實例2

//查找/etc目錄下訪問時間爲3天的文件

#: # =< x < #+1

find /etc/ -atime 3 -exec stat {} \;

(3: 匹配範圍是從3天 - 4天之間)

 

//查找/etc目錄下3天之內訪問過的文件

-#: x < #

find /etc/ -atime -3 -exec stat {} \;

(-3: 匹配範圍是小於3天之內的)

 

//查找/etc目錄下3天以前訪問過的文件

+#:# x >= #+1

find /etc/ -atime +3 -exec stat {} \;

(+3: 匹配範圍是等於或大於3天以上的)

 

以“分鐘”爲單位

-amin [+|-]#:  根據訪問時間查找

-mmin [+|-]#:  根據修改時間查找

-cmin [+|-]#:  根據改變時間查找

 

find /tmp/ -amin -5 查找範圍是小於5分鐘內

find /tmp/ -mmin +5 查找範圍是大於或等於5分鐘以上

 

 

根據權限查找:

-perm [+|-]MODE

MODE: 不帶+|- 表示與MODE精確匹配

find /etc/ -perm 644 查找權限爲644的文件

 

+MODE: 任何一類用戶的權限只要能包括對其指定的任何一位權限即可

find /etc/ -perm +555 任何一類用戶有任何一位權限即匹配

 

-MODE: 每一類對象指定的每一位權限都必須同時存在方爲符合條件;隱含與條件。

find /etc/ -perm -111 -ls 查找所有人都有執行權限

find /etc/ -perm -222 -ls 查找所有人都有寫權限

find /etc/ -perm -666 -ls 查找所有人都有讀和寫權限

 

權限計算:

3=2+1

4=read

5=4+1

6=4+2

7=4+2+1

 

處理動作:

-print  默認動作:打印至屏幕

-ls  顯示找到的文件的詳細屬性

-exec COMMAND {} \; 對找到的文件執行期望的操作

刪除/tmp下沒有屬組的文件

find /tmp -nogroup -a -type f -exec rm {} \;

-ok        COMMAND {}\;  執行命令之前提示確認

 

注意:

find命令會一次性找到所有符合條件的文件,並一同傳遞給後面的命令;但有些命令不能接收過長的參數

解決辦法: find | xargs COMMAND

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章