find 命令詳解

1、簡介
find命令用來在指定目錄下查找文件。任何位於參數之前的字符串都將被視爲欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。並且將查找到的子目錄和文件全部進行顯示。

find:
實時
精確
支持衆多查找標準
遍歷指定目錄中的所有文件完成查找,速度慢

2、語法
find [options][查找路徑][查找條件][處理動作]

 查找路徑:默認爲當前目錄
 查找條件:默認爲查找指定路徑下的所有文件
 處理動作:默認爲顯示

2.1查找條件:
根據文件名查找
-name "文件名稱": 支持使用globbing
*
?
[ ]
[^]
-iname "文件名稱": 查找時不區分字符大小寫

根據屬主查找
-user UserName

根據屬組查找
-group GroupName
-uid UID
-gid GID
查找沒有屬主的文件
-nouser
查找沒有屬組的文件
-nogroup

eg:
   # find /etc/ -name "*passwd*"
   # find /etc/ -iname "*passwd*"
   # find /tmp -user hadoop
   # find /tmp -group hadoop
   # find /tmp -uid 500
   # find /tmp -gid 500

組合條件:
-a: 與,同時滿足 !!![默認-a選項]!!!
-o: 或,
-not,!: 非,取反 [取反或變與、與變或] 與的優先級高於或

非A, 並且 非B: 非(A或B)
非A,或 非B: 非(A且B)

eg:
   # find /tmp -nouser
   # find /tmp -nouser -o -user hadoop
   # find /tmp -user hadoop -name "*.txt"    查找屬主hadoop並且文件名以txt結尾的文件
   # find /tmp -user hadoop -not -name "*.txt"     表示取反
   # find /tmp -not -user hadoop -not -name "*.txt"     即不也不
   # find /tmp -not \( -user hadoop -o -name "*.txt" \) ##  
   # find /tmp -not -user hadoop -o -not -name "*.txt"  即是也是  
   # find /tmp -not \( -user hadoop -a -name "*.txt" \) ##

根據文件類型查找
類型參數列表:
-type: 文件類型
f: 普通文件
d: 目錄
b: 塊設備
c: 字符設備
l: 符號鏈接文件
p: 命名管道
s: 套接字
...
文件大小單元:
b —— 塊(512字節)
c —— 字節
w —— 字(2字節)
k —— 千字節
M —— 兆字節
G —— 吉字節

eg: 
   # find /var/log/ -size +1M    查找大於1M的文件
   # find /var/log/ -size -1M    查找小於1M的文件

根據時間戳查找
以天爲單位(time):
-atime [+|-]#
-mtime
-ctime
...
以分鐘爲單位(min):
-amin
-min
-cimin
find 命令詳解
+: 表示 (#+1)天之外被訪問過
-: 表示 #天之內被訪問過
無符號: 表示短於(#+1) >x>=#天的時間段被訪問過
-atime: 指定時間曾被存取過的文件,意思是文件被讀取過
-mtime: 指定時間曾被改動過的文件,意思是文件內容被修改過
-ctime: 指定時間曾被更改過的文件,意思是文件權限被更改過

eg:
   # find /var/log -atime -1    查找/var/log 最近一天內訪問過的文件

根據權限查找
-perm [+|-]MODE
MODE: 精確匹配
+MODE: 任何一類用戶的任何一位權限匹配
-MODE: 每類用戶的指定要檢查的權限位都匹配
...
文件權限: 644
-perm 600: 否
-perm +222 任何一個有
-perm -222 所有都有

eg:
   # find / -type f -perm +001
   # find / -type f -perm -444

2.2處理動作:
-print: 打印在標準輸出上
-ls: 長格式輸出各文件信息
-exec COMMAND {} \; 對查找到的文件執行指定的命令
-ok COMMAND {} \; 交互式的 -exec
{}: 佔位符

eg:
   # find /tmp/ -perm -003 -type f -ls     查找其它用戶有寫權限和執行權限的並且文件類型爲普通文件的
   # find /tmp/test -perm -003 -type f -exec ls -l {} \;    [如果一次查找的文件非常多,會由於傳遞參數過多而導致命令溢出的]

3.總結
find [查找路徑] [查找條件] [動作]
-name, -iname, -user, -group, -uid, -gid, -nouser, -nogroup, -size, -type, -atime, -perm,
-exec, -ok, -ls
其中 {} 代表當前查到的符合條件的文件名,\;則是語法格式
...
find把查找到的所有文件一次性地傳遞給-exec所指定的命令
find | xargs COMMAND 把前面命令執行結果,當做後面命令的執行參數去使用
| xargs COMMAND == ``命令替換 |管道命令傳遞的結果是字符串,只能做文本處理;如果當做文件處理需要用命令替換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章