天天看點

linux 檔案查找 find 指令詳解2. find 常用 options選項3 find 對搜尋結果處理參數

**

find 簡介

**

Linux下檔案查找常用指令有locate和find指令。locate指令不是實時查找,是以查找的結果不精确,但查找速度很快。因為它查找的不是目錄,而是一個資料庫(/var/lib/locatedb),這個資料庫中含有本地所有檔案資訊。Linux系統自動建立這個資料庫,并且每天自動更新一次,是以使用locate指令查不到最新變動過的檔案。為了避免這種情況,可以在使用locate之前,先使用updatedb指令,手動更新資料庫。find指令是實時查找,是周遊目錄中所有檔案完成查找,是以查找結果精确,并且支援衆多選項,功能非常強大,但是速度慢。 在周遊一個大的檔案系統(30G以上)運作一個非常消耗資源的find指令時,都傾向于把它放在背景執行,下面将重點講解find 指令。

一 find 指令格式:

find pathname -options [-print -exec -ok …]

1 指令功能:用于在檔案樹種查找檔案,并作出相應的處理

- 指令參數:

pathname: find指令所查找的目錄路徑,預設為目前路徑

-options 檔案查找的條件參數

[-print -exec -ok …] 處理動作,預設為顯示。

-print: find指令将比對的檔案輸出到标準輸出

-exec: find指令對比對的檔案執行該參數所給出的shell指令。相應指令的形式為’command’ { } \;,注意{ }和\;之間的空格。

-ok:和-exec的作用相同,隻不過以一種更為安全的模式來執行該參數所給出的shell指令,在執行每一個指令之前,都會給出提示,讓使用者來确定是否執行。

2. find 常用 options選項

name 按照檔案名查找檔案。

-perm 按照檔案權限來查找檔案。

-prune 使用這一選項可以使find指令不在目前指定的目錄中查找,如果同時使用-depth選項,那麼-prune将被find指令忽略。

-user 按照檔案屬主來查找檔案。

-group 按照檔案所屬的組來查找檔案。

-mtime -n +n 按照檔案的更改時間來查找檔案, - n表示檔案更改時間距現在n天以内,+ n表示檔案更改時間距現在n天以前。find指令還有-atime和-ctime 選項 ,用法和 -mtime 一樣。

-nogroup 查找無有效所屬組的檔案,即該檔案所屬的在/etc/groups中不存在。

-nouser 查找無有效屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。

-newer file1 ! file2 查找更改時間比檔案file1新但比檔案file2舊的檔案。

-type 查找某一類型的檔案,例如:

b - 塊裝置檔案。

d - 目錄。

c - 字元裝置檔案。

p - 管道檔案。

l - 符号連結檔案。

f - 普通檔案。

-depth :使查找在進入子目錄前先行查找完本目錄

-fstype:查找位于某一類型檔案系統中的檔案,這些檔案系統類型通常可以在配置檔案/etc/fstab中找到,該配置檔案中包含了本系統中有關檔案系統的資訊。

-mount:在查找檔案時不跨越檔案系統mount點。

-follow:如果find指令遇到符号連結檔案,就跟蹤至連結所指向的檔案。

-cpio:對比對的檔案使用cpio指令,将這些檔案備份到錄音帶裝置中。

3 find 對搜尋結果處理參數

print //預設情況下的動作

-ls //查找到後用ls 顯示出來

-ok [commend] //詢問使用者是否要執行後面的指令

-exec [commend] //查找後執行指令的時候不詢問使用者,直接執行

注意 :-ok和-exec指令将指令行上後續的參數作為他們參數的一部分,直到被\;序列終止。魔術字元串{}是-ok和-exec指令的一個特殊類型的參數,它将被目前檔案的完整路徑取代。

-print:預設的處理動作,顯示至螢幕

-delete:删除查找到的檔案

-fls file:查找到的所有檔案的長格式資訊儲存至指定檔案中

{}: 用于引用查找到的檔案名稱自身

| xargs // xargs 可以用來傳遞參數,可以對find 後的結果執行特定的指令,這個非常實用而且簡潔,個人覺得有了xargs 後 -exec 顯得很多餘了

find傳遞查找到的檔案至後面指定的指令時,查找到所有符合

條件的檔案一次性傳遞給後面的指令

4 find 使用舉例和說明

find -mtime -1 查找一天内被修改的檔案

find . -name “*.log” 在目前目錄查找 以.log結尾的檔案

find /bin -perm 777 查找bin 目錄下權限為777 的檔案

find /var -type f -name “*.log” | xargs ls -l 找出var 下 .log結尾的檔案并且列出列出詳細資訊

find /root -size +10M -mindepth 2 -maxdepth 4 找出root下大于10M 的檔案,從第二層查找,最大目錄深度為4 。

find /app ! -type d 查找類型為非目錄的檔案 (!表示非)

find /app -empty 查找大小為0的檔案或空目錄

find /home -links +2 查硬連接配接數大于2的檔案或目錄

find . -name “[A-Z]*” -pri26nbsp 對比對的檔案使用cpio指令,将他們備份到錄音帶裝置中

find /etc -name “host*” 查以host開頭的檔案

find /app -name “[a-z][a-z][0–9][0–9].txt” 查以兩個小寫字母和兩個數字開頭的txt檔案

find /etc/ -perm -007 -exec ls -l {} \; #查所有使用者都可讀寫執行的檔案同-perm 777

name ‘*.h’ -exec grep AF_INEF6 {} \; 因grep無法遞歸搜尋子目錄,故可以和find相結合使用。 在/usr/include 所有子目錄中的.h檔案中找字串AF_INEF6

find /app -name “test*” -ok rm {} \; 查找/app 下 test開頭的檔案或者目錄,執行删除指令,并詢問使用者是否确認删除, 如果是-exec rm 那就直接删除了!

find /data –type f -perm 644 -name “*.sh” –exec

chmod 755 {} \; 查找 data 目錄下權限為644 以 檔案名以 .sh 結尾的普通檔案 然後更改權限為755.

find 指令舉例到此結束。

繼續閱讀