find是一個強大的文本搜索工具,有很多選型可以根據用户,時間,尺寸,路徑,權限,文件類型等選項查找,也可以指定路徑,最後還能對找到的文件進行處理 .
下面主要介紹find的四個方面:
一:find與locate的比較
二:find的常見用法及其語法
三:find與xargs和exec的配置使用
四:find的實例
一:find與locate
locate:依賴於updatedb庫,是模糊匹配.查找速度塊,非實時查找
find: 速度慢,精確查找
二: find的語法
find [options] [查找路徑] [查找條件] [處理動作]
查找路徑:默認為當前路徑
查找條件:根據指定的選型不同而不同
處理動作:默認為打印匹配的文件
a.find的常見用法
-user:根據用户查找,可以用來查找屬於屬主的文件
-group:可以根據用户組來查找配置文件
-perm:根據用户權限查找
[+/-]MODE MODE:用於精確查找
+MODE: 任一位任意權限滿足需求
-MODE: 每類用户的權限都要匹配
-mtime:修改的時間
-ctime:創建時間
-atime:訪問時間
時間參數:+n:表示n天之外
-n:表示n天之內
n:表示大於等於n天小於等於n+1天
-size:根據文件大小查找
文件大小的參數
+n(數字):大於n
-n:(小於n)
n(大於等於n-1小於等於n)
-type:根據文件類型查找
-name:根據文件名查找,支持通配符
path "目錄" -prune -o -print :排除某個目錄
組合條件
-a :和
-not:非
非A並且非B:非(A或B)
非A或非B:非(A並B)
b.執行find後的默認動作:
-print:打印標準輸出到屏幕 ;
-ls: 以長格式顯示查找結果
-exec COMMAND {} \; 將所有查找結果:
-ok COMMAND {} \;交互式的exec
三:find的xargs與exec
find與 exec,xargs配合會將文件的參數傳遞給後面可以執行命令
find與xargs
在使用find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之後,就會出現 溢出錯誤。錯誤信息通常是“參數列太長”或“參數列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然後是下一批,並如此繼續下去。
在有些系統中,使用-exec選項會為處理每一個匹配到的文件而發起一個相應的進程,並非將匹配到的文件全部作為參數一次執行;這樣在有些情況下就會出現進程過多,系統性能下降的問題,因而效率不高;
而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次獲取所有的參數,還是分批取得參數,以及每一次獲取參數的數目都會根據該命令的選項及系統內核中相應的可調參數來確定。
四 實例
1、查找/var/目錄屬主為root且屬組為mail的所有文件;
屬主:-user 並且:-a 屬組:-group
find /var -user -a -group mail
2、查找/usr目錄下不屬於root、bin或hadoop的所用文件;
非A並且 非B=非(A或B)
find /usr -not \(-user root -o -user bin -o -user haddop \)
3、查找/etc/目錄下最近一週內其內容修改過的,且不屬於root或hadoop的文件;
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)
4、查找當前系統上沒有屬主或屬組,且最近1個月內曾被訪問過的文件;
# 沒有屬主:-nouser 沒有屬組:nogroup 一個月沒有訪問用atime
find / \(-nouser -o nogroup\) -a -mtime -30
5、查找/etc/目錄下大於1M且類型為普通文件的所有文件;
# 尺寸:用size 並且用 -a 文件類似為普通文件:用type -f
find /etc -size +1M -a -type f
6、查找/etc/目錄所有用户都沒有寫權限的文件;
#所有都沒有用 -not 和-perm +MODE
find /etc/ -not -perm +222
7、查找/etc/目錄下至少有一類用户沒有寫權限;
#至少一類用户沒有寫權限,屬於 非A,並且 非B: 非(A或B)
find /etc -not -perm -222
8、查找/etc/init.d/目錄下,所有用户都有執行權限且其它用户有寫權限的文件;
#根據用户的權限匹配,並且是精確匹配,因此需要用-MODE
find /etc/init.d/ -perm -113
9.備份所有系統的.conf結尾的配置文件.
# 文件名匹配用-name ,備份得用-exec 配合cp來完成了
find / -name "*.conf" -exec cp {} {}.bak \
[root@localhost ~]# find / -name "*.conf" -exec cp {} {}.bak \;
[root@localhost ~]# find / -name "*.conf.bak"
/var/run/nm-dhclient-eth0.conf.bak
/etc/gnome-vfs-2.0/modules/ssl-modules.conf.bak
/etc/gnome-vfs-2.0/modules/default-modules.conf.bak
/etc/gnome-vfs-2.0/modules/smb-module.conf.bak
/etc/wpa_supplicant/wpa_supplicant.conf.bak
/etc/sos.conf.bak
/etc/ld.so.conf.d/kernel-2.6.32-431.el6.x86_64.conf.bak
/etc/ld.so.conf.d/mysql-x86_64.conf.bak
/etc/ld.so.conf.d/xulrunner-64.conf.bak
/etc/ld.so.conf.d/qt-x86_64.conf.bak
/etc/acpi/events/power.conf.bak
/etc/acpi/events/video.conf.bak
轉載於:https://blog.51cto.com/limeizhi/1366331