Linux中find用法

Linux下查找文件的命令有兩個;locate 和 find

 

首先說下locate,locate這個命令是對其生成的數據庫進行遍歷(生成數據庫的命令:updatedb),這一特性決定了用locate查找文件速度很快,但是locate命令只能對文件進行模糊匹配,在精確度上來說差了點,簡單介紹下它的兩個選項:

 #locate 

       -i        //查找文件的時候不區分大小寫 比如:locate  –i   passwd

       -n       //只顯示查找結果的前N行     比如:locate  -n  5   passwd

Linux中find常見用法示例:


一、根據文件名查找

      #  -name       //根據文件名查找(精確查找)

      #  -name  "*.txt"  //根據關鍵字查找

      #  -iname       //根據文件名查找,但是不區分大小寫

     #  -name  a*    在當前目錄下查找以a開始的文件


wKioL1c9TG3RzTYMAAAQXp5l-p4119.pngwKiom1c9TznBSpyOAAAW-PmYjrs915.png

二、?表示  通配任意的單個字符

wKiom1c9S7XQC_EiAAAK0zta1lQ223.png

        # -user   username       #按文件屬主來查找

        # -group    groupname     #按組來查找

wKioL1c9TM2xqqdXAAAPZ7-KeQ8683.png

三、根據文件類型查找

   -type      -name 

         f     // 普通文件

         d     //目錄文件

         l     //鏈接文件

         b     //塊設備文件

         c     //字符設備文件

         p     //管道文件

         s     //socket文件

 eg.find .-type d|sort   //查找當前所有目錄並排序

wKioL1c9UU7A6PGCAAAVgXOjqMY640.pngwKiom1c9UTOx7Qp4AAALgOzBWV4768.png

四、根據文件權限查找文件

  -perm

     #find  /tmp  -perm  755   //查找在/tmp目錄下權限是755的文件


     #find  /tmp  -perm  +222  //表示只要有一類用戶(屬主,屬組,其他)的                            匹配寫權限就行

     #find  /tmp  -perm  -222   //表示必須所有類別用戶都滿足有寫權限

wKioL1c9Tb_T2HoEAAAnrFJpOz4725.png

五、按文件大小查找


      find / -size 250c (查找1,50字節大小的文件,c表示字節)

      find / -size +2500c (查找大於1,500字節大小的文件,+表示大於)    

      find / -size +2500c (查找小於1,500字節大小的文件,-表示小於)

wKioL1c9Tgij30OrAAAfdtnNEH0405.png

六、按時間查找

modification time(mtime) 

當該文件的“內容數據”更改時,就會更新這個時間。 內容數據指的是文件的內容,而不是文件的屬性或權限。

status time(ctime)

當該文件的“狀態”(status)改變時,就會更新這個時間。舉例來說,像是權限與屬性被更改了,都會更新這個時間。

access time(atime)

當“該文件的內容被取用”時,就會更新這個讀取時間(access)。舉例來說,我們使用cat去讀取/etc/man.config,就會更新該文件的atime了。


     訪問一個目錄其atime改變,mtime ctime不變;

     修改一個目錄:在一個目錄下touch一個文件,mtimectime會改變,atime不一定會變;

      # find / -mtime -n +n 文件數據的最後修改時間(n爲天數) (-n爲n天內,+n爲n天前)

      # find / -atime -n +n文件數據的最後存取時間(n爲天數)  

      # find / -ctime -n +n 文件數據的最後更改時間(n爲天數) 

      # find / -mmin  -n +n文件數據的最後修改時間(n爲分鐘)(-n爲n分鐘內,+n爲n分鐘前)

      # find / -amin  -n +n文件數據的最後存取時間(n爲分鐘)  

      # find / -cmin  -n +n 文件數據的最後更改時間(n爲分鐘) 


  例如:

     # find /Bit    -mtime -2    在/Bit下查最近兩天內改動過的文件

     # find /Bit     -atime -1    查/Bit下1天之內被存取過的文件

     # find /Bit     -mmin -500   在/Bit下查最近500分鐘內改動過的文件

wKiom1c9TWOD-Jp7AAAaFZNJd3A828.pngwKioL1c9TAjg5IcnAAASG7fUhP4669.png

      ls -lc filename  列出文件的 ctime

      ls -lu filename  列出文件的 atime

      ls -l  filename  列出文件的 mtime

wKioL1c9Tw_AmdEXAAAay_KsBME040.png

七、使用mindepth和maxdepth限定搜索指定目錄的深度
   在root目錄及其子目錄下查找test文件。

  在root目錄下及其最大2層深度的子目錄中查找test文件.

 在root目錄下及其最大3層深度的子目錄中查找test文件.

  在3-5層中優先查找文件內容名爲test的文件

wKioL1c9VCeAqXtfAAAoTFP9t_Q717.png

八、其他例子

 1、無錯誤查找:

      # find / -name access_log 2 >/dev/null

 2、邏輯

      -and 條件與 -or 條件或

 3、查找字符串

     # find . -name '*.html' -exec grep 'mailto:'{}

 4、其它:

      # find / -empty 空白文件、空白文件夾、沒有子目錄的文件夾

     # find / -false 查找系統中總是錯誤的文件

     # find / -fstype type 找存在於指定文件系統的文件,如type爲ext2

     # find / -gid n 組id爲n的文件

     # find -name april* fprint file  

         在當前目錄下查找以april開始的文件,並把結果輸出到file中

     # find -name ap* -o -name may*    查找以ap或may開頭的文件

     # find /mnt -name tom.txt -ftype vfat

        在/mnt下查找名稱爲tom.txt且文件系統類型爲vfat的文件

     # find /mnt -name t.txt ! -ftype vfat   

        在/mnt下查找名稱爲tom.txt且文件系統類型不爲vfat的文件

     # find /tmp  -name wa* -type l       

        在/tmp下查找名爲wa開頭且類型爲符號鏈接的文件

     # find /home -mtime -2   在/home下查最近兩天內改動過的文件

     # find /home -newer tmp.txt  在/home下查更新時間比tmp.txt近的文件或目錄

     # find . -size +3000k -exec ls -ld {} ;

     # find *.c -exec cp '{}' /tmp ';'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章