find
finds是實時查找工具,遍歷指定起始路徑下文件系統層級結構完成文件查找
一、工作特性:
1、查找速度較慢
2、精確查找
3、實時查找
find [OPTIONS][查找起始路徑][查找條件][處理動作]
查找起始路徑:指定具體搜索目標起始路徑,默認爲當前目錄
查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關係權限等等 標準進行,默認爲找出指定路徑下的所有文件
處理動作:對符號查找條件的文件做出的操作,例如刪除等操作,默認爲輸出至 標準輸出
二、查找條件:
1、根據文件名查找:
-name "pattern"
-iname "pattern"匹配時忽略大小寫
支持glob風格的通配符
*,?,[],[^]
-regex pattern :基於正則表達式模式查找文件,匹配是整個路徑, 而非其名
2、根據文件從屬關係查找:
-user USERNAME:查找屬主指定用戶的所有文件
-group USERNAME:查找屬組指定組的所有文件
-uid UID:查找屬主指定的UID的所有文件
gid UID:查找屬組指定的GID的所有文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
例:
1.查找/var目錄下屬主爲root,且屬組爲gentoo的所有文件或目錄
~]# find /var -user root -a -gentoo user -ls
3、根據文件的類型查找:
-type TYPE
f:普通文件
d:目錄文件
l:符號鏈接文件
b:塊設備文件
c:字符設備文件
p:管道文件
s:套接字文件
4、組合測試:
與:-a,默認組合邏輯
或: -o,二個符合一即可
非:-not,取反
例:
1.查找/tmp目錄下不屬於root, bin或user1的所有文件或目錄;用兩種方法;
~]# find /tmp -not -user root -a -not -user bin -a -not -user user1
~]# find /tmp -not \( -user root -o -user bin -o -user user1 \) -ls
5、據文件的大小查找:
-size [+|-]#UNIT
常用單位:k, M, G
#UNIT:(#-1, #]
-#UNIT:[0,#-1]
+#UNIT:(#, oo)
例:
1.查找/etc目錄下大於2M且類型爲普通文件的所有文件;
~]# find /etc -size +2M -type f -exec ls -lh {} \;
6、根據時間戳查找:
(1)以“天”爲單位
-atime [+|-]#
#: #= < x < #+1
-#: x < #
+#: x >= #+1
-mtime [+|-]#
-ctime [+|-]#
(2)以“分鐘”爲單位
-amin [+|-]#
-mmin
-cmin
例:
1.查找/tmp目錄下最近一週內其內容修改過,且屬主不是root用戶也不是hadoop用戶的文 件或目錄;
~]# find /tmp -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
7、根據權限查找:
(1) -perm [/|-]MODE
MODE: 與MODE精確匹配
/MODE:任何一類用戶的權限只要能包含對其指定的任何一位權限即可;
-MODE:每一類用戶的權限都包含對其指定的所有權限;
例:
1.查找/etc/init.d/目錄下,所有用戶都有執行權限,且其它用戶有寫權限的所有文件;
~]# find /etc -perm -113 -type f -ls
2.查找/etc目錄下所有用戶都沒有寫權限的文件;
~]# find /etc -not -perm /222 -type f -ls
(2)處理動作:
-print:默認至標準輸出;默認的動作
-ls:類似於對查找到的文件執行ls -l命令,輸出文件的詳細信息
-delete:刪除查找到的文件
-fls /PATH/TO/SOMEFILE:查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND{}\; :對查找到的每個文件執行由COMMAND表示的命令,每次操作都由用戶 進行確認
-exec COMMAND {}\; :對查找到的每個文件執行由COMMAND表示的命令
例:
1.查找/etc目錄下大於1M且類型爲普通文件的所有文件;
~]# find /etc -size +1M -type f -exec ls -lh {} \;
注意:find傳遞查找到的文件路徑至後面的命令時,是先查找出所有符合條件的文件路徑,並 一次性傳遞給後面的命令;但是有些命令不能接受過長的參數,此時命令執行會失敗, 另一種方式可規避此問題