功能強大的find命令

find是Linux系統管理員所喜好用的必備工具之一,它能夠很輕鬆地找到你想要的文件。

【功能】shell

查找文件,可遍歷指定目錄按相應的條件查找所須要的文件安全

【語法】socket

find [查找路徑……] [查找條件] [處理動做]ide

(1)查找路徑工具

默認爲當前目錄,也能夠遍歷整個文件系統oop

運行以下三個 find 命令將獲得相同的結果 — 當前目錄和全部子目錄中的全部文件(包括隱藏文件)的完整清單:性能

#find ui

#find .blog

#find . -print進程

(2)查找條件

1)按文件名查找: -name

支持使用通配符查找:* 、?、[ ]

[舉例]

p_w_picpath

查找時注意文件名區分大小寫

-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之間的文件都是)

p_w_picpath

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]——指定時間範圍內文件被訪問過

理解查找時間

p_w_picpath

[舉例]

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模式代替

[舉例]

p_w_picpath

p_w_picpath

 

 

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遍歷目錄的層次

p_w_picpath

-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

相關文章
相關標籤/搜索