天天看點

每天一個Linux指令(22)--find指令詳解

  find 一些常用參數的一些常用執行個體和一些具體用法和注意事項。  

  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

  想要查找$HOME 目錄中的檔案,可以用:

  find  ~  -name  "*"  -print 或 find  .  -print      注釋:~ 即為 $HOME 使用者家目錄

  要想讓系統高負荷運作,就從跟目錄開始查找所有的檔案。

  find  /  -name  "*"  -print

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

  find  .   -name  "[a-z]*[4-9].log"  -print

  2.用perm 選項

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

    如在目前目錄下查找檔案權限位為755 的檔案,即檔案屬主可以讀、寫、執行,其他使用者可以讀、執行的檔案,可以用:

    find .  -perm  755 -print

    或者,在八進制資料前面加上一個橫杠,表示都比對,如-007 就相當于 777, -005 相當于 555.

    find   . -perm  -005 

  3.忽略某個目錄:

    如果在查找檔案時希望忽略某個目錄,因為你知道那個目錄中沒有你所要查找的檔案,那麼可以使用 -prune 選項來指出需要忽略的目錄。在使用 -prune 選項時要當心,因為如果你同時使用了 -depth 選項,那麼 -prune 選項就會被find 指令忽略。如果希望在 test 目錄下查找問價,但不希望 在 test/test3 目錄下查找,可以使用:

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

  4.使用 find 查找檔案的時候怎麼避開某個檔案目錄:

    執行個體1.在test 目錄下查找不在 test4  子目錄之内的所有檔案

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

    說明:

    find  [-path ..] [expression]

    在路徑清單的後面是表達式

    -path   "test" -prune  -o   -print  是   -path  “test” -a  -prune   -o   -print  的簡寫表達式按順序求值,

         -a   和  -o   都是短路求值,與 shell  的&&  和 || 類似。

    -path   “test” 為真,則求值  -prune  , -prune  傳回真,與邏輯表達式為真;否則不求值  -prune  與邏輯表達式為假。

如果 -path  “test” -a -prune 為假,則求值  -print  , -print 傳回真,或邏輯表達式為真;否則不求值  -print ,或邏輯表達式為真。

    這個表達式組合特例可以用僞代碼寫為:

  if   -path  "test"  then

  -prune

  else

  -print

  執行個體2:避開多個檔案夾

  find  test \( -path  test/test4  -o  -path  test/test3  \) -prune  -o  -print  注釋:圓括号表示表達式的結合。  \ 表示引用,即訓示shell 不對後面的字元作特殊解釋,而留給 find 指令去解釋其意義。

  執行個體3:查找某一确定檔案, -name 等選項加在 -o  之後

  find  test  \(-path  test/test4  -o   -path   test/test3  \)  -prune  -o  -name  "*.log"  -print

  5.使用 user 和  nouser 選項:

    按檔案屬主查找檔案:

    執行個體1.在 $HOME 目錄中查找檔案屬主為 ack 的檔案

    find  ~  -user  ack   -print

    執行個體2:在 /etc 目錄下查找檔案屬主為 ack  的檔案

    find  /etc  -user  ack  -print

    執行個體3:查找屬主賬戶已經被删除的檔案,可以使用 -nouser 選項。在 /home 目錄下查找所有的這類檔案

    find  /home  -nouser  -print 

      說明:這樣就能夠找到那些屬主在 /etc/passwd 檔案中沒有有效賬戶的檔案。在使用 -nouser 選項時,不必給出使用者名; find 指令能夠為你完成相應的工作。

  6.使用 group 和 nogroup 選項

    就像 user 和 nouser 選項一樣,針對檔案所屬于的使用者組,find 指令也具有同樣的選項。

  7.按照更改時間或通路時間等查找檔案

    如果希望按照更改時間來查找檔案,可以使用 mtime , atime , ctime 選項,如果系統突然沒有可用空間了,很可能某一個檔案的長度在此期間增長迅速,這時就可以用mtime 選項來查找這樣的檔案。 

    用減号 - 來限定更改時間在距今 n 日以内的檔案,而用加号 +  來限定更改時間在距今 n 日以前的檔案

    希望在系統根目錄下查找更改時間在5日以内的檔案,可以用:

    find  /  -mtime -5  -print

    查找/var/dam 目錄下更改時間在 3 日以前的檔案,可以用:

    find  /var/adm  -mtime  +3  -print

  8.查找比某個檔案新或舊的檔案

    如果希望查找更改時間比某個檔案新但比另一個檔案就的所有檔案,可以使用 -newer 選項。

    它的一般形式為:

      newest_file_name   !   oldest_file_name

    其中,  ! 是邏輯非符号。

    執行個體1:查找更改時間比檔案 001.log 新 但比檔案 002.log 舊的檔案

    指令:

      find  -newer 001.log  ! -newer 002.log <<<<<<<<<<<<<<<<<<<

    執行個體2:查找更改時間在比002.log 檔案新的檔案

      find   .   -newer  002.log   -print

  9.使用 type 選項:

    執行個體1:在 /etc 目錄下查找所有目錄

      find  /etc  -type  d  -print

    執行個體2:在目前目錄下查找除目錄以外的所有類型的檔案

      find  .  !  -type    d   -print

    執行個體3:在 /etc 目錄下查找所有的符号連結檔案

      find  /etc   -type  l  -print

  10.使用 size 選項:

    可以按照檔案長度來查找檔案,這裡所指的檔案長度既可以用塊(block)來計量,也可以用自己來計量。以位元組計量檔案長度的表達形式為 N  c;以塊計量檔案長度隻用數字表示即可。

    在按照檔案長度查找檔案時,一般使用這種以位元組表示的檔案長度,在檢視檔案系統的大小,因為這時使用塊來計量更容易轉換。

    執行個體1:在目前目錄下查找檔案長度大于1 M位元組的檔案

    find  .  -size   +1000000c  -print 

    執行個體2:在 /home/apache目錄下查找檔案長度恰好為 100 位元組的檔案:

    find  /home/apache   -size  100c  -print

    執行個體3:在目前目錄下查找長度超過10塊的檔案(一塊等于 512位元組)

    find  .  -size   +10   -print

  11.使用 depth 選項:

    在使用  find  指令時,可能希望先比對所有的檔案,再在子目錄中查找。使用depth 選項就可以使find 指令這樣做。這樣做的一個原因就是,當在使用find 指令向錄音帶上備份檔案系統時,希望首先備份所有的檔案,其次在備份子目錄中的檔案。

    執行個體1:find 指令從檔案系統的根目錄開始,查找一個名為 CON.FILE 的檔案。

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

    說明:它将首先比對所有的檔案然後再進入子目錄中查找

  12.使用 mount 選項:

  在目前的檔案系統中查找檔案(不進入其他檔案系統),可以使用  find 指令的 mount 選項。

    執行個體1:從目前目錄開始查找位于檔案系統中檔案名為 XC 結尾的檔案

    find  .   -name  "*.XC"   -mount  -print 

 ----------今天這課好長,脖子都酸了。

    

繼續閱讀