一、簡介
find命令用來在指定目錄下查找文件。任何位於參數以前的字符串都將被視爲欲查找的目錄名。若是使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。而且將查找到的子目錄和文件所有進行顯示。ide
find:
實時
精確
支持衆多查找標準
遍歷指定目錄中的全部文件完成查找,速度慢oop
二、語法
find [options][查找路徑][查找條件][處理動做]ui
查找路徑:默認爲當前目錄 查找條件:默認爲查找指定路徑下的全部文件 處理動做:默認爲顯示
2.1查找條件:
根據文件名查找
-name "文件名稱": 支持使用globbing
*
?
[ ]
[^]
-iname "文件名稱": 查找時不區分字符大小寫code
根據屬主查找
-user UserNameblog
根據屬組查找
-group GroupName
-uid UID
-gid GID
查找沒有屬主的文件
-nouser
查找沒有屬組的文件
-nogrouphadoop
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,!: 非,取反 [取反或變與、與變或] 與的優先級高於或ci
非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 —— 吉字節it
eg: # find /var/log/ -size +1M 查找大於1M的文件 # find /var/log/ -size -1M 查找小於1M的文件
根據時間戳查找
以天爲單位(time):
-atime [+|-]#
-mtime
-ctime
...
以分鐘爲單位(min):
-amin
-min
-cimin
+: 表示 (#+1)天以外被訪問過
-: 表示 #天以內被訪問過
無符號: 表示短於(#+1) >x>=#天的時間段被訪問過
-atime: 指定時間曾被存取過的文件,意思是文件被讀取過
-mtime: 指定時間曾被改動過的文件,意思是文件內容被修改過
-ctime: 指定時間曾被更改過的文件,意思是文件權限被更改過io
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 == ``命令替換 |管道命令傳遞的結果是字符串,只能作文本處理;若是當作文件處理須要用命令替換