Linux find 命令用來在指定目錄下查找文件。任何位于參數(shù)之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設(shè)置任何參數(shù),則 find 命令將在當(dāng)前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進(jìn)行顯示。
find path -option [ -print ] [ -exec -ok command ] {} ;
參數(shù)說明 :
find 根據(jù)下列規(guī)則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之前的部份為 path,之后的是 expression。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 為預(yù)設(shè) expression。
expression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。
-mount, -xdev : 只檢查和指定目錄在同一個文件系統(tǒng)下的文件,避免列出其它文件系統(tǒng)中的文件
-amin n : 在過去 n 分鐘內(nèi)被讀取過
-anewer file : 比文件 file 更晚被讀取過的文件
-atime n : 在過去 n 天過讀取過的文件
-cmin n : 在過去 n 分鐘內(nèi)被修改過
-cnewer file :比文件 file 更新的文件
-ctime n : 在過去 n 天過修改過的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名稱是 name
-ipath p, -path p : 路徑名稱符合 p 的文件,ipath 會忽略大小寫
-name name, -iname name : 文件名稱符合 name 的文件。iname 會忽略大小寫
-size n : 文件大小 是 n 單位,b 代表 512 位元組的區(qū)塊,c 表示字元數(shù),k 表示 kilo bytes,w 是二個位元組。-type c : 文件類型是 c 的文件。
d: 目錄
c: 字型裝置文件
b: 區(qū)塊裝置文件
p: 具名貯列
f: 一般文件
l: 符號連結(jié)
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 將運算式分隔,并使用下列運算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
列出給定目錄(base_path)下所有的文件和子目錄:
find base_path -print
補(bǔ)充:根據(jù)文件名和正則表達(dá)式進(jìn)行搜索,使用選項 -name 或 -iname (忽略大小寫):
find base_path -name ‘xxx’ -print find base_path -iname ’xxx‘ -print
否定參數(shù),可以用 !排除所指定到的模式
此處將打印出除 txt 文本文件外的的所有文件。
基于目錄深度的搜索
find 命令指定遍歷完所有的子目錄。使用 -maxdepth 和-mindefth 可以限制 find 命令遍歷的目錄深度,并且 find 命令默認(rèn)不搜索符號鏈接,可以用 -L 選項改變這種行為。
例如-maxdepth的參數(shù)為1時,只匹配當(dāng)前目錄下。
-mindepth 的參數(shù)代表了開始進(jìn)行匹配的目錄到 base_path 的最短距離。
基于文件類型搜索
使用 -type 可以指定搜索的文件類型,linux/unix 將所有的的一切都視為文件(文件類型有:普通文件 f,目錄 d,符號鏈接 l,字符設(shè)備 c,塊設(shè)備 b,套接字 s,F(xiàn)IFO-p),使用 -type 選項我們能夠?qū)ξ募愋瓦M(jìn)行過濾。
此處就會只匹配出特定項下的所有普通文件,和目錄。
根據(jù)文件的時間戳進(jìn)行搜索
Linux/Unix 文件系統(tǒng)中的每一個文件都有三種時間戳,訪問時間(-atime),修改時間(-mtime),變化時間(-ctime),單位為天數(shù),用整數(shù)指定,數(shù)字前加上+,表示大于這個時間;加上-,表示小于這個天數(shù);不加表示剛好這個天數(shù)。
此處的文件是我在進(jìn)行截圖之前才創(chuàng)建的,訪問,修改,變化時間均小于一天。
當(dāng)然相應(yīng)的用分鐘作為單位就可以用選項 (-amin)(-mmin)(-cmin),如下我們測試修改時間
基于文件大小的搜索
find 提供了指定文件大小的單位選項進(jìn)而搜索符合大小文件的功能,這個搜索也常常會讓用戶感到非常舒服(b:塊, c:字節(jié), w:字, k:千字節(jié), M:兆字節(jié), G:吉字節(jié))。
在搜索之前我們先用 ls(list)指令來查看下當(dāng)前目錄下的文件信息:
信息的第五列就是各文件目錄的大小(字節(jié)),我們通過指定匹配條件來搜索:
經(jīng)過測試,在開始目錄下,文件類型為普通目錄,文件大小大于30個字節(jié)的文件就是zl.txt了
基于文件權(quán)限和所有權(quán)的匹配
-perm 選項指定了 find 指匹配指定權(quán)限的文件,參數(shù)為文件對應(yīng)的權(quán)限碼。
我們?nèi)匀豢蓞⒖饥拗械乃形募畔⒌牡谝涣?,此處需要掌握一定關(guān)于文件權(quán)限的知識。如下我們查找權(quán)限為 644 的普通文件,即用戶可讀寫,組用戶可讀,其他可讀。
也可以用選項 -user,匹配指定用戶所擁有的文件,參數(shù)為用戶名或者UID
利用find執(zhí)行相應(yīng)操作
比如刪除文件,使用 -delete 選項;刪除測試目錄下所有的 .txt 普通文件
還可以利用 -exec 選項結(jié)合其他命令對文件進(jìn)行更高效的操作,更改文件的所屬權(quán),復(fù)制文件等,find 命令使用一對花括號 {} 代表文件名,對于每一個匹配到的文件,find 命令會將{}替換成相應(yīng)的文件名; 如果 -exec 的命令有多個參數(shù)時,需要注意結(jié)尾使用 " \; " 或者 "+",前者表示進(jìn)行轉(zhuǎn)義,不然系統(tǒng)會以為是 find 命令的結(jié)尾。
我們將測試目錄下的所有的 .txt 文件由用戶 lihongbo 轉(zhuǎn)換到用戶 litao999,我們必須以 root 用戶進(jìn)行此操作,chown 用于更改權(quán)限:
指定 find 跳過特定的目錄
使用 -prune 選項可以跳過我們在搜尋的的一些明顯我們不需要的目錄
跳過了 ./test1 目錄
需要指出的是:選項出現(xiàn)的先后次序我們也應(yīng)該考慮到內(nèi),因為它會影響到整條命令的執(zhí)行效率。
更多建議: