find 命令

一、簡介
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
find 命令
+: 表示 (#+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 == ``命令替換 |管道命令傳遞的結果是字符串,只能作文本處理;若是當作文件處理須要用命令替換

相關文章
相關標籤/搜索