文件查找類別分:locate、find
local
- 依賴于事先構建的索引,索引構建是在系統較為空閑時自動進行(周期任務),可以手動更新數據庫(updatedb),此工作機制類似于whatis(makewhatis)
- 索引構建過程需要遍歷整個根文件系統,極消耗資源
- 工作特點
- 查找都快
- 模糊查找(查找內容本身不是文件名,也包括文件路徑)
- 非實時查找(原因需要構建索引庫)
- 使用方式:locate KEYWORD
 
find
- 實時查找工具,通過遍歷指定路徑下的文件系統完成文件查找
- 工作特點
- 查找速度略慢
- 精確查找(查找文件名本身,而不包括路徑)
- 實時查找
 
- 語法
- find [OPTION] [查找路徑] [查找條件] [處理動作]
- 
查找路徑:指定具體目標路徑,默認為當前目錄 
- 
查找條件:指定查找標準,可以為文件名、大小、類型、權限等標準;默認為找出指定路徑下的所有文件 
- 
處理動作:對符合條件的文件做什么操作;默認為輸出至屏幕 
- 
查找條件 - 根據文件名查找
- -name "文件名稱":支持使用glob
- -iname "文件名稱",不區分字母大小寫
- -regex "PATTERN": 以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
 
- 根據屬主、屬組查找
- -user USERNAME
- -group GROUPNAME
- -uid UserID
- -gid GroupID
- -nouser:查找沒有屬主的文件
- -nogroup:查找沒有屬組的文件
 
- 根據文件類型查找
- type TYPE
- f:普通文件
- d :目錄文件
- l:符號鏈接文件
- s:套接字文件
- b:塊設備文件
- c:字符設備文件
- p:管道文件
 
 
- type TYPE
- 組合條件
- 與:-a
- 或:-o
- 非:-not,!
- 示例:
- !A -a !B = !(A -o B)
- !A -o !B = !(A -a B)
 
 
- 根據文件大小來查找
- size [+|-]#UNIT
- 常用單位:k,M,G
- #UNIT:表示范圍:(#-1,#]
- -#UNIT:表示范圍:[0,#-1]
- +#UNIT:表示范圍:(#,∞)
 
 
- size [+|-]#UNIT
- 根據時間戳
- 以天為單位
- -atime [+|-]#
- #:表示范圍:[#,#+1)
- -#:表示范圍:(0,#)
- +#:表示范圍:[#+1,∞)
 
- -mtime
- -ctime
 
- -atime [+|-]#
- 以分鐘為單位
- -amin
- -mmin
- -cmin
 
 
- 以天為單位
- 根據權限查找
- perm [+|-] MODE
- MODE:精確匹配權限
- -MODE:每一類對象都必須同時擁有為其指定的權限標準
- +MODE:任何一類(u,g,o)對象的權限中只要能一位匹配即可
 
 
- perm [+|-] MODE
- 例子:find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} ;
 
- 根據文件名查找
 
- 
- 處理動作
- -print:默認處理動作,顯示至屏幕
- -ls:類似于對查找到的文件執行"ls -l"命令
- -delete:刪除查找到的文件
- -fls /path/to/somefile:查找到的所有文件的長格式信息保存至指定文件中
- -ok COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令;
- 對于每個文件執行命令之前,都會交互式要求用戶確認
 
- -exec COMMAND {} \; 對查找到的每個文件執行由COMMAND指定的命令
- {}:用于引用查找到的文件名稱自身
 
- 注意:find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令,有些命令不能接受過多參數,此時命令執行可能會失敗,另一種方法可規避此問題
- find | xargs COMMAND
 
 
 
- find [OPTION] [查找路徑] [查找條件] [處理動作]
xargs 解析:
之所以能用到這個命令,關鍵是由于很多命令不支持|管道來傳遞參數,而日常工作中有有這個必要,所以就有了xargs命令,例如:
這個命令是錯誤的
find /sbin -perm +700 |ls -l
這樣才是正確的
find /sbin -perm +700 |xargs ls -l
xargs 可以讀入 stdin 的資料,并且以空白字元或斷行字元作為分辨,將 stdin 的資料分隔成為 arguments 。 因為是以空白字元作為分隔,所以,如果有一些檔名或者是其他意義的名詞內含有空白字元的時候, xargs 可能就會誤判了,如果需要處理特殊字符,需要使用-0參數進行處理。
選項解釋 :
-0 :當sdtin含有特殊字元時候,將其當成一般字符,想/'空格等