Find命令總結
實時
精確
支持眾多查找標准
遍歷指定目錄中的所有文件完成查找,速度相對慢;
find 查找路徑 查找標准 查找到以後的處理運作
查找路徑:默認為當前目錄
查找標准:默認為指定路徑下的所有文件
處理運作:默認為顯示
匹配標准
-name 'FILENAME':對文件名作精確匹配
文件名通配:
*:任意長度的任意字符
?
[]
-iname 'FILENAME': 文件名匹配時不區分大小寫
實例:
find ./ -name "*.conf"
find ./ -iname "MyC.c" 忽略大小寫!
find . -perm 777
+++++++++++++++++++++++++++++++++++++++++++++++
-user USERNAME: 根據屬主查找
-group GROUPNAME: 根據屬組查找
-uid UID: 根據UID查找
-gid GID: 根據GID查找
-nouser:查找沒有屬主的文件
-nogroup: 查找沒有屬組的文件
實例:
1、查找/var目錄下屬主為root並且屬組為mail的所有文件;
find /var -user root -group mail
2、查找/usr目錄下不屬於root,bin,或student的文件;
find /usr -not -user root -a -not -user bin -a -not -user student
find /usr -not \( -user root -o -user bin -o -user student \)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-type
f: 普通文件
d: 目錄
c:字符設備
b:塊設備
l:軟連接文件
p:管道文件
s:套節字
實例:
find /etc -type f
find /etc -type d
find ./ ! -type d #在當前目錄下查找除目錄以外的所有類型的文件
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-size [+|-]
表示文件大小,+表示大於某個數,-表示小於某個數,c表示單位是字節,你可以將c換成k,M,G.
實例:
find ./ -size 0 -exec rm {} \;
find ./ -size 0 | xargs rm -f
find . -size +1000000c #在當前目錄下查找文件長度大於1 M字節的文件
find /home/apache -size 100c #在/home/apache目錄下查找文件長度恰好為100字節的文件
find . -size +10 #在當前目錄下查找長度超過10塊的文件(一塊等於512字節)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
文件狀態判斷
-mtime: 指定時間文件內容被修改過
-ctime: 指定時間文件權限被修改過
-atime: 指定時間文件被讀取過
1、找出3天“以前”被修改過的文檔
find /var/log/ -mtime +3 -type f -print
2、找出3天“內”被修改過的文檔
find /var/log/ -mtime -3 -type f -print
3、找出第3天被修改過的文檔.
find /var/log/ -mtime 3 -type f -print
或這樣寫:
find /var/log/ -mtime +2 -mtime -4 -type f -print
注:
訪問過用amin,修改過用mmin,文件狀態改變過用cmin
精確到分鐘的用amin,mmin,cmin,精確到天的用atime,mtime,ctime
find /logs -type f -mtime +5 -exec rm {} \; #在/logs目錄中查找更改時間在5日以前的文件並刪除它們
find / -mtime -5 -print #在系統根目錄下查找更改時間在5日以內的文件
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-mount:在查找文件時不跨越文件系統mount點,這樣限制在本文件系統!
這個用的不多就不舉實例了!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-prune
find /apps -path "/apps/bin" -prune -o -print #在/apps目錄下查找文件,但不希望在/apps/bin目錄下查找。在用這條命令時,要麼各目錄最好用絕對路徑,要麼前後對應,如:find test/ -path "./test/a" -prune -o -print 這種方式是不對的.
-depth:在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找。
-maxdepth:
find . -maxdepth 1 -name fred #在當前目錄下查找
find . -maxdepth 2 -name fred #在當前目錄的下一級目錄查找
find -mindepth 3 -maxdepth 5 -name passwd
[root@fb13 /]# find . -maxdepth 3 -name test
./b/test
./usr/bin/test
./a/test
find /project -maxdepth 2 \( -path "/project/exapi/log" -o -path "/project/exapi/backup" \) -prune -o -print |grep "/project/exapi/" |xargs tar zcf /backup/exapi_`date +%F`.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++
使用混合查找方式: -a -o -not
find /tmp -size +10000000c -a -mtime +2
find / -user andy -o -user jack
find /tmp -not -user zjqiu