每(mei)天一個linux命令(ling)(22):find 命令(ling)的(de)參數(shu)詳解
find一些常用參數(shu)的一些(xie)常用實例和一些(xie)具體用法和注意(yi)事項。
1.使用name選項(xiang):
文(wen)(wen)件(jian)名(ming)選項(xiang)是(shi)(shi)find命(ming)令最常用(yong)的選項(xiang),要(yao)么單獨使用(yong)該選項(xiang),要(yao)么和其他選項(xiang)一起使用(yong)。 可以(yi)使用(yong)某種文(wen)(wen)件(jian)名(ming)模式來匹配文(wen)(wen)件(jian),記(ji)住要(yao)用(yong)引號將文(wen)(wen)件(jian)名(ming)模式引起來。 不管當前路徑是(shi)(shi)什么,如果(guo)想要(yao)在自己的根目(mu)錄$HOME中(zhong)查(cha)找(zhao)文(wen)(wen)件(jian)名(ming)符合*.log的文(wen)(wen)件(jian),使用(yong)~作為 'pathname'參數,波浪(lang)號~代表了你的$HOME目(mu)錄。
find ~ -name "*.log" -print
想要在當前目錄及子目錄中查找(zhao)所有的‘ *.log‘文件,可以用:
find . -name "*.log" -print
想(xiang)要的當前目錄及子目錄中(zhong)查找文(wen)件名以一個大寫字母(mu)開頭的文(wen)件,可以用(yong):
find . -name "[A-Z]*" -print
想(xiang)要在/etc目(mu)錄中查(cha)找文件(jian)名(ming)以(yi)host開頭的文件(jian),可以(yi)用:
find /etc -name "host*" -print
想要查找$HOME目錄中的文件,可(ke)以用:
find ~ -name "*" -print 或find . -print
要想讓(rang)系統高負荷運行,就從根目錄開始查找所有(you)的文件。
find / -name "*" -print
如(ru)果想(xiang)在當(dang)前目錄查找(zhao)文件名以一個(ge)個(ge)小寫字母開頭,最后是4到9加(jia)上.log結束的(de)文件:
命令(ling):
find . -name "[a-z]*[4-9].log" -print
輸出:
[root@localhost test]# ll
總計 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 06:08 test3
drwxrwxr-x 2 root root 4096 11-13 05:50 test4
[root@localhost test]# find . -name "[a-z]*[4-9].log" -print
./log2014.log
./log2015.log
./test4/log2014.log
[root@localhost test]#
2.用perm選項:
按照文(wen)(wen)(wen)件權限(xian)模式用-perm選項(xiang),按文(wen)(wen)(wen)件權限(xian)模式來查找文(wen)(wen)(wen)件的(de)話。最(zui)好使(shi)用八(ba)進制的(de)權限(xian)表示法。
如在(zai)當(dang)前目錄下查(cha)找(zhao)文件(jian)(jian)(jian)權限位(wei)為755的(de)文件(jian)(jian)(jian),即(ji)文件(jian)(jian)(jian)屬主(zhu)可以讀(du)、寫、執行,其他用(yong)戶(hu)可以讀(du)、執行的(de)文件(jian)(jian)(jian),可以用(yong):
[root@localhost test]# find . -perm 755 -print
.
./scf
./scf/lib
./scf/service
./scf/service/deploy
./scf/service/deploy/product
./scf/service/deploy/info
./scf/doc
./scf/bin
[root@localhost test]#
還(huan)有一種(zhong)表達方法:在(zai)八進制數字前面(mian)要加一個橫(heng)杠(gang)-,表示(shi)都匹配(pei),如-007就(jiu)相(xiang)當(dang)(dang)于777,-005相(xiang)當(dang)(dang)于555,
命令:
find . -perm -005
輸出(chu):
[root@localhost test]# ll
總計(ji) 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 06:08 test3
drwxrwxr-x 2 root root 4096 11-13 05:50 test4
[root@localhost test]# find . -perm -005
.
./test4
./scf
./scf/lib
./scf/service
./scf/service/deploy
./scf/service/deploy/product
./scf/service/deploy/info
./scf/doc
./scf/bin
./test3
[root@localhost test]#
3.忽略(lve)某個目錄:
如(ru)(ru)果在(zai)(zai)(zai)查(cha)(cha)找(zhao)文(wen)件時(shi)希(xi)(xi)望(wang)忽(hu)略(lve)某個(ge)目錄,因為你(ni)知道(dao)那(nei)個(ge)目錄中沒有你(ni)所要查(cha)(cha)找(zhao)的文(wen)件,那(nei)么(me)可(ke)以使用(yong)-prune選(xuan)(xuan)項來指(zhi)出需要忽(hu)略(lve)的目錄。在(zai)(zai)(zai)使用(yong)-prune選(xuan)(xuan)項時(shi)要當心,因為如(ru)(ru)果你(ni)同時(shi)使用(yong)了(le)-depth選(xuan)(xuan)項,那(nei)么(me)-prune選(xuan)(xuan)項就會被(bei)find命令忽(hu)略(lve)。如(ru)(ru)果希(xi)(xi)望(wang)在(zai)(zai)(zai)test目錄下查(cha)(cha)找(zhao)文(wen)件,但(dan)不希(xi)(xi)望(wang)在(zai)(zai)(zai)test/test3目錄下查(cha)(cha)找(zhao),可(ke)以用(yong):
命令:
find test -path "test/test3" -prune -o -print
輸出:
[root@localhost soft]# find test -path "test/test3" -prune -o -print
test
test/log2014.log
test/log2015.log
test/test4
test/test4/log2014.log
test/test4/log2013.log
test/test4/log2012.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
[root@localhost soft]#
4.使用(yong)find查找文件的時(shi)候(hou)怎么避(bi)開某個文件目錄(lu):
實例1:在test 目錄下(xia)查找不在test4子(zi)目錄之內(nei)的(de)所有文件
命令:
find test -path "test/test4" -prune -o -print
輸出:
[root@localhost soft]# find test
test
test/log2014.log
test/log2015.log
test/test4
test/test4/log2014.log
test/test4/log2013.log
test/test4/log2012.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
test/test3
[root@localhost soft]# find test -path "test/test4" -prune -o -print
test
test/log2014.log
test/log2015.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
test/test3
[root@localhost soft]#
說明:
find [-path ..] [expression]
在路徑列表的(de)后面的(de)是表達式(shi)
-path "test" -prune -o -print 是 -path "test" -a -prune -o -print 的簡寫表達式按順序(xu)求值, -a 和(he)(he) -o 都是短路求值,與(yu) shell 的 && 和(he)(he) || 類似如果(guo)
-path "test" 為(wei)(wei)真(zhen)(zhen),則(ze)求值(zhi) -prune , -prune 返回真(zhen)(zhen),與邏(luo)輯表達(da)式為(wei)(wei)真(zhen)(zhen);否則(ze)不求值(zhi) -prune,與邏(luo)輯表達(da)式為(wei)(wei)假(jia)。如果 -path "test" -a -prune 為(wei)(wei)假(jia),則(ze)求值(zhi) -print ,-print返回真(zhen)(zhen),或邏(luo)輯表達(da)式為(wei)(wei)真(zhen)(zhen);否則(ze)不求值(zhi) -print,或邏(luo)輯表達(da)式為(wei)(wei)真(zhen)(zhen)。
這個(ge)表(biao)達式組合(he)特例可(ke)以用(yong)偽碼寫為:
if -path "test" then
-prune
else
實例(li)2:避(bi)開多個文(wen)件夾:
命令:
find test \( -path test/test4 -o -path test/test3 \) -prune -o -print
輸出:
[root@localhost soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -print
test
test/log2014.log
test/log2015.log
test/scf
test/scf/lib
test/scf/service
test/scf/service/deploy
test/scf/service/deploy/product
test/scf/service/deploy/info
test/scf/doc
test/scf/bin
test/log2013.log
test/log2012.log
[root@localhost soft]#
說明:
圓括號表示(shi)(shi)表達式的(de)結合。 \ 表示(shi)(shi)引(yin)用(yong),即指示(shi)(shi) shell 不對后面的(de)字符作特殊解(jie)釋,而留給 find 命令去(qu)解(jie)釋其意義。
實例3:查找某(mou)一確定文件(jian),-name等選項加(jia)在-o 之后
命令(ling):
find test \(-path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print
輸(shu)出:
[root@localhost soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print
test/log2014.log
test/log2015.log
test/log2013.log
test/log2012.log
[root@localhost soft]#
5.使用user和nouser選項:
按文件(jian)(jian)屬主查找(zhao)文件(jian)(jian):
實例(li)1:在(zai)$HOME目錄(lu)中查找(zhao)文件(jian)(jian)屬(shu)主為peida的文件(jian)(jian)
命令:
find ~ -user peida -print
實例(li)2:在(zai)/etc目錄下查找文(wen)件屬主為peida的文(wen)件:
命令:
find /etc -user peida -print
說(shuo)明:
實(shi)例(li)3:為了查(cha)找(zhao)屬主帳戶已經(jing)被刪(shan)除的文件,可以使用-nouser選項。在(zai)/home目錄(lu)下(xia)查(cha)找(zhao)所有的這(zhe)類文件
命令:
find /home -nouser -print
說明:
這樣就能夠找到那些屬主在/etc/passwd文(wen)件(jian)中(zhong)沒(mei)有有效帳戶(hu)的文(wen)件(jian)。在使用-nouser選(xuan)項時(shi),不必給出用戶(hu)名(ming); find命令能夠為(wei)你完成(cheng)相(xiang)應的工作。
6.使用group和nogroup選項:
就(jiu)像user和(he)nouser選(xuan)(xuan)項一樣,針(zhen)對文(wen)件(jian)所屬于的(de)用戶組, find命(ming)令(ling)也具有同樣的(de)選(xuan)(xuan)項,為了(le)在/apps目錄下(xia)查找(zhao)屬于gem用戶組的(de)文(wen)件(jian),可以用:
find /apps -group gem -print
要(yao)查找(zhao)沒有(you)有(you)效所(suo)屬用(yong)戶組的所(suo)有(you)文(wen)件,可以使用(yong)nogroup選(xuan)項。下面的find命令從(cong)文(wen)件系統的根目(mu)錄處查找(zhao)這(zhe)樣的文(wen)件:
find / -nogroup-print
7.按(an)照更改時(shi)間(jian)或訪(fang)問(wen)時(shi)間(jian)等查找(zhao)文件(jian):
如果(guo)希望按照更改時間來查(cha)找(zhao)文件(jian),可以使用mtime,atime或ctime選項。如果(guo)系(xi)統突然(ran)沒有可用空間了(le),很有可能某一(yi)個文件(jian)的長度(du)在此期(qi)間增(zeng)長迅速,這時就可以用mtime選項來查(cha)找(zhao)這樣的文件(jian)。
用(yong)減號-來限(xian)定(ding)更改時間在(zai)距今(jin)n日以內的文件,而用(yong)加號+來限(xian)定(ding)更改時間在(zai)距今(jin)n日以前的文件。
希望在(zai)系(xi)統根目錄下(xia)查找更改時間(jian)在(zai)5日以內的文件,可以用(yong):
find / -mtime -5 -print
為了在/var/adm目錄下查(cha)找更(geng)改時(shi)間在3日以前的文件,可以用:
find /var/adm -mtime +3 -print
8.查找比(bi)某個文(wen)(wen)件新或舊的文(wen)(wen)件:
如(ru)果希望查找更(geng)改時(shi)間比某個文件(jian)新(xin)但比另一個文件(jian)舊(jiu)的所有文件(jian),可以使用-newer選項。
它的一(yi)般形式為:
newest_file_name ! oldest_file_name
其中,!是(shi)邏輯非符(fu)號(hao)。
實例(li)1:查找更改時間比(bi)文件(jian)log2012.log新但比文件log2017.log舊的文(wen)件
命令(ling):
find -newer log2012.log ! -newer log2017.log
輸(shu)出:
[root@localhost test]# ll
總(zong)計 316
-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
-rw-r--r-- 1 root root 0 11-13 06:03 log2014.log
-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log
-rw-r--r-- 1 root root 0 11-16 14:41 log2016.log
-rw-r--r-- 1 root root 0 11-16 14:43 log2017.log
drwxr-xr-x 6 root root 4096 10-27 01:58 scf
drwxrwxr-x 2 root root 4096 11-13 06:08 test3
drwxrwxr-x 2 root root 4096 11-13 05:50 test4
[root@localhost test]# find -newer log2012.log ! -newer log2017.log
.
./log2015.log
./log2017.log
./log2016.log
./test3
[root@localhost test]#
實例2:查找更改時間在比log2012.log文件新(xin)的文件
命令:
find . -newer log2012.log -print
輸出:
[root@localhost test]# find -newer log2012.log
.
./log2015.log
./log2017.log
./log2016.log
./test3
[root@localhost test]#
9.使(shi)用type選項:
實例1:在(zai)/etc目錄下(xia)查找所(suo)有(you)的(de)目錄
命(ming)令:
find /etc -type d -print
實例2:在當前目錄下查找除目錄以外的所有類型的文(wen)件
命令(ling):
find . ! -type d -print
實例3:在(zai)/etc目錄(lu)下查找(zhao)所有的符號鏈接文件
命令:
find /etc -type l -print
10.使用size選項:
可(ke)以(yi)按照文件(jian)(jian)長(chang)度來查找文件(jian)(jian),這里所指(zhi)的文件(jian)(jian)長(chang)度既可(ke)以(yi)用(yong)(yong)(yong)塊(kuai)(block)來計量,也可(ke)以(yi)用(yong)(yong)(yong)字(zi)節(jie)來計量。以(yi)字(zi)節(jie)計量文件(jian)(jian)長(chang)度的表(biao)達形式為(wei)N c;以(yi)塊(kuai)計量文件(jian)(jian)長(chang)度只用(yong)(yong)(yong)數(shu)字(zi)表(biao)示(shi)即可(ke)。
在按照文(wen)件長(chang)度查(cha)找文(wen)件時(shi),一般使用(yong)這種以字節表示(shi)的文(wen)件長(chang)度,在查(cha)看文(wen)件系統的大(da)小(xiao),因(yin)為這時(shi)使用(yong)塊來計(ji)量(liang)更(geng)容易轉(zhuan)換。
實(shi)例1:在當前目(mu)錄下查(cha)找文件(jian)長度大于1 M字節的文件(jian)
命(ming)令:
find . -size +1000000c -print
實(shi)例2:在/home/apache目錄下(xia)查找文件長(chang)度恰好為100字節的文件:
命(ming)令:
find /home/apache -size 100c -print
實(shi)例3:在當前目錄下查(cha)找(zhao)長度超過10塊的文件(jian)(一塊等于512字(zi)節)
命(ming)令:
find . -size +10 -print
11.使(shi)用depth選項:
在(zai)(zai)使(shi)用(yong)find命令時,可能希望(wang)先(xian)匹配所有(you)的(de)文(wen)(wen)件(jian)(jian),再(zai)在(zai)(zai)子目錄中查找。使(shi)用(yong)depth選項就可以使(shi)find命令這(zhe)樣做(zuo)。這(zhe)樣做(zuo)的(de)一(yi)個(ge)原因就是,當(dang)在(zai)(zai)使(shi)用(yong)find命令向磁帶上備(bei)(bei)份(fen)文(wen)(wen)件(jian)(jian)系統時,希望(wang)首先(xian)備(bei)(bei)份(fen)所有(you)的(de)文(wen)(wen)件(jian)(jian),其次(ci)再(zai)備(bei)(bei)份(fen)子目錄中的(de)文(wen)(wen)件(jian)(jian)。
實例1:find命令(ling)從(cong)文件系統的(de)(de)根目錄開始,查(cha)找(zhao)一個名為CON.FILE的(de)(de)文件。
命令:
find / -name "CON.FILE" -depth -print
說明:
它將(jiang)首先匹配所有的文件(jian)然后再進入子目(mu)錄中查(cha)找(zhao)
12.使用mount選項(xiang):
在當(dang)前的文(wen)(wen)件系統中查找文(wen)(wen)件(不進入其他(ta)文(wen)(wen)件系統),可(ke)以使用find命(ming)令的mount選項。
實例1:從當前目錄開始查找位于(yu)本文件(jian)系統中文件(jian)名以XC結尾的文件(jian)
命令(ling):
find . -name "*.XC" -mount -print
關注 熵減黑客 ,一起學習成長
