linux學習 find命令

2021-08-14 12:58:06 字數 3354 閱讀 7916

用於在檔案樹中查詢檔案,並作出相應的處理

命令格式:

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

命令引數:

pathname: find命令所查詢的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。

-print: find命令將匹配的檔案輸出到標準輸出。

-exec: find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形為'command' \;,注意和\;之間的空格。

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

命令選項:

-name 按照檔名查詢檔案

-perm 按檔案許可權查詢檔案

-user 按檔案屬主查詢檔案

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

-type  查詢某一型別的檔案,諸如:

b - 塊裝置檔案

d - 目錄

c - 字元裝置檔案

l - 符號鏈結檔案

p - 管道檔案

f - 普通檔案

-size n :[c] 查詢檔案長度為n塊檔案,帶有c時表檔案位元組大小

-amin n   查詢系統中最後n分鐘訪問的檔案

-atime n  查詢系統中最後n*24小時訪問的檔案

-cmin n   查詢系統中最後n分鐘被改變檔案狀態的檔案

-ctime n  查詢系統中最後n*24小時被改變檔案狀態的檔案

-mmin n   查詢系統中最後n分鐘被改變檔案資料的檔案

-mtime n  查詢系統中最後n*24小時被改變檔案資料的檔案

(用減號-來限定更改時間在距今n日以內的檔案,而用加號+來限定更改時間在距今n日以前的檔案。 )

-maxdepth n 最大查詢目錄深度

-prune選項來指出需要忽略的目錄。在使用-prune選項時要當心,因為如果你同時使用了-depth選項,那麼-prune選項就會被find命令忽略

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

例項:

(1)查詢48小時內修改過的檔案

find -atime -2

(2)在當前目錄查詢 以.log結尾的檔案。 ". "代表當前目錄

find ./ -name '*.log'

(3)查詢/opt目錄下 許可權為 777的檔案

find /opt -perm 777

(4)查詢大於1k的檔案

find -size +1000

c

find -size 1000c  查詢等於1000字元的檔案

-exec   引數後面跟的是command命令,它的終止是以;為結束標誌的,所以這句命令後面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義,所以前面加反斜槓。{}   花括號代表前面find查詢出來的檔名。

(5)在當前目錄中查詢更改時間在10日以前的檔案並刪除它們(無提醒)

find . -type f -mtime +10 -exec rm -f {} \;

(6)當前目錄中查詢所有檔名以.log結尾、更改時間在5日以上的檔案,並刪除它們,只不過在刪除之前先給出提示。 按y鍵刪除檔案,按n鍵不刪除

find . -name '*.log' mtime +5 -ok -exec rm {} \;

(7)當前目錄下查詢檔案名以passwd開頭,內容包含"pkg"字元的檔案

find . -f -name 'passwd*' -exec grep "pkg" {} \;

(8)用exec選項執行cp命令 

find . -name '*.log' -exec cp {} test3 \;
-xargs find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只獲取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分檔案,然後是下一批,並如此繼續下去。

例項:(9)查詢當前目錄下每個普通檔案,然後使用xargs來判斷檔案型別

find . -type

f -print | xargs file

(10)查詢當前目錄下所有以js結尾的並且其中包含'editor'字元的普通檔案

find . -type f -name "*.js" -exec grep -lf 'ueditor' {} \;

find -type f -name '*.js' | xargs grep -lf 'editor'

(11)利用xargs執行mv命令

find . -name "*.log" | xargs -i mv {} test4

(12)用grep命令在當前目錄下的所有普通檔案中搜尋hostnames這個詞,並標出所在行

find . -name \*(轉義) -type

f -print | xargs grep -n 'hostnames'

(13)查詢當前目錄中以乙個小寫字母開頭,最後是4到9加上.log結束的檔案

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

(14)在test目錄查詢不在test4子目錄查詢

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

(15)例項1:查詢更改時間比檔案log2012.log新但比檔案log2017.log舊的檔案

find -newer log2012.log ! -newer log2017.log

使用depth選項:

depth選項可以使find命令向磁帶上備份檔案系統時,希望首先備份所有的檔案,其次再備份子目錄中的檔案。 

例項:find命令從檔案系統的根目錄開始,查詢乙個名為con.file的檔案。 它將首先匹配所有的檔案然後再進入子目錄中查詢

find / -name "con.file" -depth -print

Linux學習筆記 find命令

find 搜尋檔案系統 實時搜尋 find 目錄 條件 動作 目錄 不輸入代表當前目錄 find find boot 條件 使用者和組 user group nouser nogroup 查詢 home 下擁有者為 mk 的檔案 root localhost home find home user ...

Linux學習之find命令

今天學習find命令 命令格式 find 路徑 引數 1 根據檔名使用正規表示式進行搜尋 find name txt iname 引數 忽略字母大小寫 2 多正則匹配進行檔案搜尋 find name txt o name log 上面命令會列印出所有的 txt 和 pdf 檔案 進行括號轉義 3 通...

find 命令 Linux命令篇 find命令

find name txt o name pdf print演示結果 find regex txt pdf iregex 忽略大小寫的正則 查詢所有非txt文字 find name txt print演示結果 列印出當前目錄的檔案 深度為1 find maxdepth 1 type f演示結果 5....