linux學習-find命令
用於在檔案樹中尋找檔案,並作出相應的處理
命令格式:
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 +1000c
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命令向磁帶上備份檔案系統時,希望首先備份所有的檔案,其次再備份子目錄中的檔案。
&nb