在系統上按給定的雕件查找符合的的文件 有兩種實現工具: locate和find
這篇博文主要介紹find的用法
find是通過遍歷指定起始路徑下的文件系統層級結構來完成條件查找
其工作特性是:
⒈查找速度略慢 -在find命令中可能會經常使用到正則表達式來查找
⒉精確查找
⒊實時查找
用法: find [OPTIONS] [查找起始路徑] [查找條件] [相應處理動作]
find有多種查找條件:
⒈根據文件名查找
-name "pattern"
-lname "pattern" : 不區分文件名中的大小寫並支持glob風格的通配符
-regex pattern : 基於正則表達式文件查找.匹配整個路徑.而不是基名
⒉根據文件的從屬關係查找
-user USERNAME 查找屬主爲指定用戶的文件
-uid 根據UID進行查找 在刪除用戶之後之前該用戶創建過的文件就只有UID 沒有用戶名
這種情況下可以用uid查找
-group GROUPNAME: 查找屬組爲指定組的文件
-gid 根據gid進行查找
-nosuer : 查找沒有屬主的文件
-nogroup : 查找沒有屬組的文件 查找被刪除用戶遺留下來的文件可以用
⒊根據文件類型查找
-typeTYPE
⒋組合測試 條件 -a/-o 條件
-a: 與 默認情況下就已經是組合"與"邏輯
-o: 或
-not,! :非 查找文件名不是te*的文件
⒌根據文件的大小查找
-size [+|-]#UNIT 常用單位:K,M,G
我們要查找一個1G的文件時並不是指文件大小正好等於1G 當查找1G文件的時候這裏是有一定的 誤差存在的 1G=1024M 1M=1024K 所以換算的時候肯定是有誤差的
#UNIT: (#-1,#]size-1<size<=size
如我們要查找500M文件的時候實際上搜出來的文件大小是 499<x<=500 範圍內的文件
-#UNIT:[0,#-1]<=size-1的
+#UNIT:(#,無限大) >size的
6.根據時間戳查找 在時間戳查找中也是有一定的誤差範圍的.同大小一樣
以'天'爲單位:
-atime [+|-]#:
#:[#,#+1)三天前的文件 範圍爲 3<=時間<4
-#: (#,0]
+#: (無限大,#)
以'分鐘'爲單位
-amin
-mmin
-cmin
7.按權限查找
-perm [/|-]mode 644權限形式
mode : 精確權限查找 664 就必須查找664
/mode : 任何一類用戶(ugo)中的任何一位(rwx)符合條件即滿足
9位權限之間存在"或"關係 600 查找用戶6的文件
-mode : 每一類用戶的權限中的每一位同時符合條件
9位權限之間存在'與關係' 範圍是664時 777也符合條件
處理動作:
-print:輸出至標準輸出:默認的動作
-ls : 類抑於 ls-l
注:ls本身也是一個條件
-ls 展開的是其前面的條件
如 find /tmp -ls -user root 與
find /tmp -user root -ls 兩個命令的結果是不一樣的
前者是先把 /tmp目錄下所有文件的詳細信息都展示時候查找 root用戶的文件
後者是先查找屬主爲root的文件 把屬於root的文件詳細展示出來
-delete:刪除查找到的文件
-fls /PATH/TO/SOMEFILE 把文件的詳細信息保存至制定文件中
-ok COMMAND {}\; :固定格式!! 對查找到的每個文件執行COMMAND表示的命令
-exec COMMAND {} \; : 每次操作用戶不確認
注:不知道是我自己系統配置的原因還是CentOS6.7版本的原因還是我自己本身敲錯命令了
如果各位在運行 -exec或者-ok的時候碰見了以下問題
一直等待輸入 然後我按網上的方法 在最後添加了"" '' `` " {}\;"等符號
出現了遺漏參數的錯誤提示. 對此網上的解決方法基本上是在尾部不同位置加入引用副
但是我還是運行錯誤 所以試着在"{}" \ 結果在我的機器是能運行成功命令了
可以試試看.