Linux下的搜索查找命令的詳解(find)

4.findweb

  Linux下find命令在目錄結構中搜索文件,並執行指定的操做。Linux下find命令提供了至關多的查找條件,功能很強大。因爲find具備強大的功能,因此它的選項也不少,其中大部分選項都值得咱們花時間來了解一下。即便系統中含有網絡文件系統( NFS),find命令在該文件系統中一樣有效,只你具備相應的權限。 在運行一個很是消耗資源的find命令時,不少人都傾向於把它放在後臺執行,由於遍歷一個大的文件系統可能會花費很長的時間sql

4.1.命令格式:shell

find pathname -options [-print -exec -ok ...]apache

4.2.命令功能:vim

用於在文件樹種查找文件,並做出相應的處理安全

4.3.命令參數:bash

pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。 
-print: find命令將匹配的文件輸出到標準輸出。 
-exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式爲'command' {  } \;,注意{   }和\;之間的空格。 
-ok: 和-exec的做用相同,只不過以一種更爲安全的模式來執行該參數所給出的shell命令,在執行每個命令以前,都會給出提示,讓用戶來肯定是否執行。網絡

[finance@master2-dev ~]$ cat 123.txt 
qwda
[finance@master2-dev ~]$ find 123* -ok cat {} \;
< cat ... 123.txt > ? yes
qwda
[finance@master2-dev ~]$ find 123* -exec cat {} \;
qwda
[finance@master2-dev ~]$ find 123*| xargs cat
qwda

4.4.命令選項:app

-name   filename             #查找名爲filename的文件
-perm                        #按執行權限來查找
-user    username             #按文件屬主來查找
-group groupname            #按組來查找
-mtime   -n +n                #按文件更改時間來查找文件,-n指n天之內,+n指n天之前
-atime    -n +n               #按文件訪問時間來查GIN: 0px">
-ctime    -n +n              #按文件建立時間來查找文件,-n指n天之內,+n指n天之前
-nogroup                     #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
-nouser                     #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
-newer   f1 !f2              找文件,-n指n天之內,+n指n天之前 
-ctime    -n +n               #按文件建立時間來查找文件,-n指n天之內,+n指n天之前 
-nogroup                     #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
-nouser                      #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
-newer   f1 !f2               #查更改時間比f1新但比f2舊的文件
-type    b/d/c/p/l/f         #查是塊設備、目錄、字符設備、管道、符號連接、普通文件
-size      n[c]               #查長度爲n塊[或n字節]的文件
-depth                       #使查找在進入子目錄前先行查找完本目錄
-fstype                     #查更改時間比f1新但比f2舊的文件
-type    b/d/c/p/l/f         #查是塊設備、目錄、字符設備、管道、符號連接、普通文件
-size      n[c]               #查長度爲n塊[或n字節]的文件
-depth                       #使查找在進入子目錄前先行查找完本目錄
-fstype                      #查位於某一類型文件系統中的文件,這些文件系統類型一般可 在/etc/fstab中找到
-mount                       #查文件時不跨越文件系統mount點
-follow                      #若是遇到符號連接文件,就跟蹤連接所指的文件
-cpio                %;      #查位於某一類型文件系統中的文件,這些文件系統類型一般可 在/etc/fstab中找到
-mount                       #查文件時不跨越文件系統mount點
-follow                      #若是遇到符號連接文件,就跟蹤連接所指的文件
-cpio                        #對匹配的文件使用cpio命令,將他們備份到磁帶設備中
-prune                       #忽略某個目錄

-size n:[c] 查找文件長度爲n塊的文件,帶有c時表示文件長度以字節計。-depth:在查找文件時,首先查找當前目錄中的文件,而後再在其子目錄中查找。
-fstype:查找位於某一類型文件系統中的文件,這些文件系統類型一般能夠在配置文件/etc/fstab中找到,該配置文件中包含了本系統中有關文件系統的信息。
-mount:在查找文件時不跨越文件系統mount點。
-follow:若是find命令遇到符號連接文件,就跟蹤至連接所指向的文件。
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。ssh

另外,下面三個的區別:

-amin n   查找系統中最後N分鐘訪問的文件
-atime n  查找系統中最後n*24小時訪問的文件
-cmin n   查找系統中最後N分鐘被改變文件狀態的文件
-ctime n  查找系統中最後n*24小時被改變文件狀態的文件
-mmin n   查找系統中最後N分鐘被改變文件數據的文件
-mtime n  查找系統中最後n*24小時被改變文件數據的文件

4.5.實例

4.5.1.使用name選項:

文件名選項是find命令最經常使用的選項,要麼單獨使用該選項,要麼和其餘選項一塊兒使用。  可使用某種文件名模式來匹配文件,記住要用引號將文件名模式引發來。  無論當前路徑是什麼,若是想要在本身的根目錄$HOME中查找文件名符合*.log的文件,使用~做爲 'pathname'參數,波浪號~表明了你的$HOME目錄。

find ~ -name "*.log" -print  ------*表示  通配任意的字符      ?表示  通配任意的單個字符

想要在當前目錄及子目錄中查找全部的‘ *.log‘文件,能夠用: 

find . -name "*.log" -print  

想要的當前目錄及子目錄中查找文件名以一個大寫字母開頭的文件,能夠用:  

find . -name "[A-Z]*" -print  ---------[ ] 表示 通配括號裏面的任意一個字符

想要在/etc目錄中查找文件名以host開頭的文件,能夠用:  

find /etc -name "host*" -print  

若是想在當前目錄查找文件名以一個個小寫字母開頭,最後是4到9加上.log結束的文件:  

[finance@master2-dev ~]$ find . -name "[a-z]*[4-9].log" -print
./script/hs_err_pid32186.log
./script/hs_err_pid19725.log
./script/hs_err_pid5736.log

4.5.2.用perm選項:

按照文件權限模式用-perm選項,按文件權限模式來查找文件的話。最好使用八進制的權限表示法。  

如在當前目錄下查找文件權限位爲755的文件,即文件屬主能夠讀、寫、執行,其餘用戶能夠讀、執行的文件,能夠用:  

[finance@master2-dev ~]$ find . -perm 755 -print

還有一種表達方法:在八進制數字前面要加一個橫槓-,表示都匹配,如-007就至關於777,-005至關於555,

4.5.3.忽略某個目錄:

若是在查找文件時但願忽略某個目錄,由於你知道那個目錄中沒有你所要查找的文件,那麼可使用-prune選項來指出須要忽略的目錄。在使用-prune選項時要小心,由於若是你同時使用了-depth選項,那麼-prune選項就會被find命令忽略。若是但願在test目錄下查找文件,但不但願在test/test3目錄下查找,能夠用:  

命令:

find test -path "test/test3" -prune -o -print

[finance@master2-dev ~]$ find . -name *log
./nby/dm_rpt_070001_rds_d.log
./nby/rpt_sms_001_d_group.log
./nby/rpt_170006_ams_d.log
./nby/mls_epp_member_lab_info.log
./nby/rpt_170009_ams_d.log
./nby/bi_td.tsor_page_prmtr_enter_td.log
./nby/tmp_act_acct_info.log
./nby/rpt_170010_ams_d.log
./nby/bi_td.tsor_br_page_cate_td.log
./nby/dpa_pty_onl_rgst_info.log
./nby/finance.sor_mls_fnd_bill_order.log
./.sqoop/shared-metastore.db.log
./script/hs_err_pid30353.log
./script/hs_err_pid32186.log
./script/hs_err_pid19725.log
./script/log
./script/log/hiveserver2.log
./script/log/restartHiveServer2.log
./script/hs_err_pid5736.log
./syf/dm_rpt_090005_pcs_m.log
./syf/dm_rpt_090006_pcs_m.log
./syf/dm_rpt_090004_pcs_m.log
[finance@master2-dev ~]$ find . -path "./syf" -prune -o -name *log -print
./nby/dm_rpt_070001_rds_d.log
./nby/rpt_sms_001_d_group.log
./nby/rpt_170006_ams_d.log
./nby/mls_epp_member_lab_info.log
./nby/rpt_170009_ams_d.log
./nby/bi_td.tsor_page_prmtr_enter_td.log
./nby/tmp_act_acct_info.log
./nby/rpt_170010_ams_d.log
./nby/bi_td.tsor_br_page_cate_td.log
./nby/dpa_pty_onl_rgst_info.log
./nby/finance.sor_mls_fnd_bill_order.log
./.sqoop/shared-metastore.db.log
./script/hs_err_pid30353.log
./script/hs_err_pid32186.log
./script/hs_err_pid19725.log
./script/log
./script/log/hiveserver2.log
./script/log/restartHiveServer2.log
./script/hs_err_pid5736.log

實例2:避開多個文件夾:

[finance@master2-dev ~]$ find .  \(  -path "./syf" -o -path "./script" \)  -prune -o -name *log -print
./nby/dm_rpt_070001_rds_d.log
./nby/rpt_sms_001_d_group.log
./nby/rpt_170006_ams_d.log
./nby/mls_epp_member_lab_info.log
./nby/rpt_170009_ams_d.log
./nby/bi_td.tsor_page_prmtr_enter_td.log
./nby/tmp_act_acct_info.log
./nby/rpt_170010_ams_d.log
./nby/bi_td.tsor_br_page_cate_td.log
./nby/dpa_pty_onl_rgst_info.log
./nby/finance.sor_mls_fnd_bill_order.log
./.sqoop/shared-metastore.db.log

說明:

圓括號表示表達式的結合。  \ 表示引用,即指示 shell 不對後面的字符做特殊解釋,而留給 find 命令去解釋其意義。  

4.5.4.使用user和nouser選項:

按文件屬主查找文件:

實例1:在$HOME目錄中查找文件屬主爲finance的文件 

命令:

find ~ -user finance -print

實例2:在/etc目錄下查找文件屬主爲peida的文件: 

命令:

find /etc/ -user finance -print

說明:

實例3:爲了查找屬主賬戶已經被刪除的文件,可使用-nouser選項。在/home目錄下查找全部的這類文件

命令:

find /home -nouser -print

說明:

這樣就可以找到那些屬主在/etc/passwd文件中沒有有效賬戶的文件。在使用-nouser選項時,沒必要給出用戶名; find命令可以爲你完成相應的工做。

4.5.5.使用group和nogroup選項:

就像user和nouser選項同樣,針對文件所屬於的用戶組, find命令也具備一樣的選項,爲了在/home/finance目錄下查找屬於gem用戶組的文件,能夠用:  

find /home/finance/ -group finance -print  

要查找沒有有效所屬用戶組的全部文件,可使用nogroup選項。下面的find命令從文件系統的根目錄處查找這樣的文件:

find / -nogroup-print

4.5.6.按照更改時間或訪問時間等查找文件:

若是但願按照更改時間來查找文件,可使用mtime,atime或ctime選項。若是系統忽然沒有可用空間了,頗有可能某一個文件的長度在此期間增加迅速,這時就能夠用mtime選項來查找這樣的文件。  

用減號-來限定更改時間在距今n日之內的文件,而用加號+來限定更改時間在距今n日之前的文件。  

但願在系統/home/finance/下查找更改時間在5日之內的文件,能夠用:

[finance@master2-dev ~]$ find /home/finance/ -mtime -5 -print
/home/finance/
/home/finance/123.txt
/home/finance/.bash_history
/home/finance/data.txt
/home/finance/.viminfo
/home/finance/.subversion
/home/finance/.subversion/README.txt
/home/finance/.subversion/servers
/home/finance/.subversion/auth
/home/finance/.subversion/auth/svn.simple
/home/finance/.subversion/auth/svn.username
/home/finance/.subversion/auth/svn.ssl.server
/home/finance/.subversion/auth/svn.ssl.client-passphrase
/home/finance/.subversion/config
/home/finance/script
/home/finance/script/monitor_hiveserver2_leak.sh
/home/finance/script/log/hiveserver2.log

4.5.7.查找比某個文件新或舊的文件:

若是但願查找更改時間比某個文件新但比另外一個文件舊的全部文件,可使用-newer選項。

它的通常形式爲:  

newest_file_name ! oldest_file_name  

其中,!是邏輯非符號。  

[finance@master2-dev nby]$ ll
total 500
-rw-r--r-- 1 finance finance 123029 Dec 18  2015 170006.csv
-rw-r--r-- 1 finance finance   4144 Dec 18  2015 170007.csv
-rw-r--r-- 1 finance finance  21075 Dec 18  2015 170009.csv
-rw-r--r-- 1 finance finance 135309 Dec 18  2015 170010.csv
-rw-rw-r-- 1 finance finance   6811 Jun 16  2015 bi_td.tsor_br_page_cate_td.log
-rw-rw-r-- 1 finance finance   6842 Jun 16  2015 bi_td.tsor_page_prmtr_enter_td.log
-rw-r--r-- 1 finance finance    129 Apr 21  2015 bsn.txt
-rw-rw-r-- 1 finance finance  22942 Apr 22  2015 dm_rpt_070001_rds_d.log
-rw-rw-r-- 1 finance finance  25510 Aug 18  2015 dpa_pty_onl_rgst_info.log
-rw-rw-r-- 1 finance finance    167 Apr 21  2015 finance.csv
-rw-rw-r-- 1 finance finance    751 Apr  1  2015 finance.sor_mls_fnd_bill_order.log
-rw-rw-r-- 1 finance finance    126 Apr 21  2015 finance.txt
-rw-rw-r-- 1 finance finance   5326 Jun 10  2015 mls_epp_member_lab_info.log
-rw-r--r-- 1 finance finance     30 Apr 21  2015 nat.txt
-rw-rw-r-- 1 finance finance  24983 Dec 18  2015 rpt_170006_ams_d.log
-rw-rw-r-- 1 finance finance  24424 Dec 18  2015 rpt_170009_ams_d.log
-rw-rw-r-- 1 finance finance  24495 Dec 18  2015 rpt_170010_ams_d.log
-rw-rw-r-- 1 finance finance    513 Jun 10  2015 rpt_sms_001_d_group.log
-rw-r--r-- 1 finance finance     83 Apr 21  2015 rule.txt
-rw-rw-r-- 1 finance finance  24856 Aug 18  2015 tmp_act_acct_info.log
[finance@master2-dev nby]$ find -newer bi_td.tsor_br_page_cate_td.log
.
./170006.csv
./rpt_170006_ams_d.log
./170009.csv
./170010.csv
./rpt_170009_ams_d.log
./170007.csv
./bi_td.tsor_page_prmtr_enter_td.log
./tmp_act_acct_info.log
./rpt_170010_ams_d.log
./dpa_pty_onl_rgst_info.log
[finance@master2-dev nby]$ find ! -newer bi_td.tsor_br_page_cate_td.log
./dm_rpt_070001_rds_d.log
./rpt_sms_001_d_group.log
./finance.csv
./mls_epp_member_lab_info.log
./bsn.txt
./finance.txt
./nat.txt
./bi_td.tsor_br_page_cate_td.log
./rule.txt
./finance.sor_mls_fnd_bill_order.log
[finance@master2-dev nby]$ find -newer bi_td.tsor_br_page_cate_td.log ! -newer bi_td.tsor_page_prmtr_enter_td.log
./bi_td.tsor_page_prmtr_enter_td.log
[finance@master2-dev nby]$ find -newer bi_td.tsor_br_page_cate_td.log ! -newer 170006.csv 
./170006.csv
./170009.csv
./170010.csv
./bi_td.tsor_page_prmtr_enter_td.log
./tmp_act_acct_info.log
./dpa_pty_onl_rgst_info.log

4.5.8.使用type選項:

實例1:在/etc目錄下查找全部的目錄  

命令:

[finance@master2-dev ~]$ find  -type d
.
./20160427
./export_temp_dpa_rist_cust_init.txt
./fanghh
./fanghh/lx
./fanghh/script
./nby
./jars
./.gnome2
./.gnome2/keyrings
./.sqoop
./.subversion
./.subversion/auth
./.subversion/auth/svn.simple
./.subversion/auth/svn.username
./.subversion/auth/svn.ssl.server
./.subversion/auth/svn.ssl.client-passphrase
./script
./script/log
./.ssh
./syf
./tmp
./mls

實例2:在當前目錄下查找除目錄之外的全部類型的文件  

命令:

[finance@master2-dev ~]$ find . ! -type d -print 
./.history
./123.txt
./.bashrc
./export_temp_dpa_rist_cust_init.txt/.000000_0.deflate.crc
./export_temp_dpa_rist_cust_init.txt/000001_0.deflate
./export_temp_dpa_rist_cust_init.txt/.000001_0.deflate.crc
./export_temp_dpa_rist_cust_init.txt/000000_0.deflate
./%s
./fanghh/test.py
./fanghh/rules.py
./fanghh/lx/dm_app_finance_service_daily_data_20160804.csv
./fanghh/script/dm_rpt_130019_fsa_web_02_d.sql
./fanghh/script/dpa_fsa_br_base_pageview.sql
./fanghh/script/dm_rpt_130016_fsa_web_01_d.sql
./fanghh/script/dm_rpt_130014_fsa_web_d.sql
......

實例3:在當前目錄下查找全部的符號連接文件

命令:

[finance@master2-dev ~]$ find -type l -print
./workspace

4.5.9.使用size選項:

能夠按照文件長度來查找文件,這裏所指的文件長度既能夠用塊(block)來計量,也能夠用字節來計量。以字節計量文件長度的表達形式爲N c;以塊計量文件長度只用數字表示便可。  

在按照文件長度查找文件時,通常使用這種以字節表示的文件長度,在查看文件系統的大小,由於這時使用塊來計量更容易轉換。  

實例1:在當前目錄下查找文件長度大於1 M字節的文件  

命令:

[finance@master2-dev ~]$ find . -size +1000000c -print
./fanghh/script/dpa_cde_fsa_br_utm_src.init
./fanghh/hadoop-0.0.1-jar-with-dependencies.jar
./jars/spark-assembly-1.4.0-hadoop2.4.0.jar
./script/log/hiveserver2.log
./tmp/export_dpa_crd_cshop_main_info.txt

實例2:在/home/apache目錄下查找文件長度剛好爲100字節的文件:  

命令:

find /home/apache -size 100c -print  

實例3:在當前目錄下查找長度超過10塊的文件(一塊等於512字節) 

命令:

find . -size +10 -print

4.5.10.使用depth選項:

在使用find命令時,可能但願先匹配全部的文件,再在子目錄中查找。使用depth選項就可使find命令這樣作。這樣作的一個緣由就是,當在使用find命令向磁帶上備份文件系統時,但願首先備份全部的文件,其次再備份子目錄中的文件。  

實例1:find命令從文件系統的根目錄開始,查找一個名爲CON.FILE的文件。   

命令:

find / -name "CON.FILE" -depth -print

說明:

它將首先匹配全部的文件而後再進入子目錄中查找

4.5.11.使用mount選項: 

  在當前的文件系統中查找文件(不進入其餘文件系統),可使用find命令的mount選項。

實例1:從當前目錄開始查找位於本文件系統中文件名以XC結尾的文件  

命令:

find . -name "*.XC" -mount -print 
相關文章
相關標籤/搜索