文件查找:
find,locate
*** locate路徑名 中包含字符串 即匹配;
依賴於已建立的數據庫 速度較快 類似whatis搜索實現
系統自動週期實現
updatedb手動更新數據庫
索引構建極消耗資源
特徵:速度較快 模糊查找 !非實時查找
-b只匹配路徑名中的基名
-c統計符合條件的文檔數量
-r BRE 可使用正則表達式
locate ./ *.repo 本目錄下.repo結尾的文件或目錄
*** find [OPTIONS] [查找起始路徑][查找條件][處理動作]
起始路徑:指定目錄下搜索 默認當前目錄;
查找條件:指定查找標準, 文件名 大小 類型等
查找動作:對匹配到的對象進行的操作 默認爲輸出至標準輸出 輸出至屏幕
特徵:查找速度略慢 精確查找 實時查找
查找條件:
表達式:選項;標準
標準:執行結果爲布爾值
1.根據文件名查找: 支持通配符
-name"patt" find /etc -name passwd[[:alnum:]]
-iname"patt"不區分大小寫 find /etc -iname *passwd
2.根據屬主屬組查找: find /testdir -uid=1000
-user USER ==> -uid UID 屬主 爲指定用戶 的文件
-groupGROUP ==> -gid GID 屬組 爲指定組 的文件
存在 用戶被移除 文件無屬主的情況
-nouser 查找 無屬主的文件 find /testdir -nouser
-nogroup 查找 無屬組的文件
例 find /testdir -user zjj -type p
/testdir下 屬主爲zjj的 管道文件
find /tmp -not \( -user root -o -iname "*zz*"\)
/tmp 目錄下 屬主不爲root 且 基名不包含zz的文件
3.根據類型查找: find /dev -type s -ls
-type TYPE
b:塊設備文件
c:字符設備文件
d:目錄文件
f:普通文件
l:符號鏈接設備 軟鏈接
p:管道文件
s:套接字文件
4.文件大小查找:
-size [+|-]#UNIT
常用單位:K,M,G相對 單位精確查找
#UNIT:(#-1,#]
-#UNIT:[0,#-1]
+#UNIT:(#,∞)find /tmp -size +10K /tmp下大於10K的文件 11K-∞
5.根據時間戳查找:
以 天 爲單位:
-atime [+|-]#
#:[#,#-1) 前 第3天
-#:(#,0] 前 3天以內
+#:(∞,#-1) 3天之前
-mtime7
-ctime
以 分鐘 爲單位
-amin
-mmin
-cmin
例 find /etc -mmin -3 3分鐘內修改過的文件
6.根據權限查找:
-perm [/|-] mode
mode精確查找 find -perm 421 查找權限爲421的文件
-mode任何一類用戶(u,g,o)的 每一位(r,w,x)都大於等於mode
例 find ./ -perm -624 匹配當前目錄含有624權限的文件
文件權限包含mode即匹配
/mode任何一類用戶(u,g,o)的 任何一位(r,w,x)符合條件即滿足
例 find ./ -perm /124 匹配當前目錄u=1 或g=2 或o=4 的文件
滿足其中之一即匹配
例 find ./ -perm /011 不管u權限 g或o有寫權限即匹配
組合標準:
與-a 默認的邏輯
或-o 滿足之一則匹配
非-not,!
處理動作:
-print輸出至標準輸出
-ls類似對查到的文件執行 ls -l 輸出文件詳細信息
find ./ -d zjj -amin -5 -not -perm /222 -ls
-delete刪除查找到的文件!
-fls /PATH將文件詳細的信息 保存至指定文件
-ok CMD {} \;對查找到的 每個文件執行CDM命令 會逐條要求確認
固定格式\; {}表示查到的所有文件
例 find ./ -nouser -a -nogroup -ok chown zjj:zjj {} \;
查找當前目錄下 無屬主無屬組的文件 全部添加屬主屬組zjj
-exec CMD {} \; 相對-ok 無確認環節 直接執行CMD
例 find ./ -perm /002 -exec mv {} {}.danger \;
當前目錄下 o有寫權限的 文件名加上.danger後綴
!find查找到所有文件後會 將結果一次行傳遞給命令,有些命令不能接受過長的參數
找到的文件過多會導致命令執行失敗可用 find ...| xargs CMD
xargs把一個數據流分割爲一些足夠小的塊,以方便過濾器和命令進行處理