我用過的linux命令 find——2018-08-30

find命令

參考

  • 語法:

find pathname -option [-print] [-exec -ok command] {} \;

  • 功能:用于在文件樹中查找文件,并做出相應(yīng)的處理
  • 參數(shù):
    • pathname: find命令所查找的目錄路徑,其中.表示當(dāng)前目錄,/表示系統(tǒng)根目錄
    • -print: 經(jīng)匹配的文件輸出到標(biāo)準(zhǔn)輸出
    • -exec: find對匹配的文件執(zhí)行該參數(shù)所給出的shell命令,需要注意 {}\;之間有空格
    • -ok: 和 -exec的作用相同,只不過以一種更安全的模式來執(zhí)行該參數(shù)給出的 shell 命令,在執(zhí)行每一個(gè)命令前,都會(huì)給出提示,讓用戶來確定是否執(zhí)行。
  • 命令選項(xiàng):
    -name: 按照文件名查找文件
    -perm: 按照文件權(quán)限來查找文件
    -user: 按照文件屬主來查找文件
    -group: 按照文件所屬的組來查找文件
    ---------------------------------------------------------------------------------------------------------------------
    -mtime -n +n: 按照文件的更改時(shí)間來查找文件,-n表示文件更改時(shí)間距離現(xiàn)在 n 天以內(nèi)+n表示文件更改時(shí)間距離現(xiàn)在 n 天以前
    -atime n: 查找系統(tǒng)中最后 n*24小時(shí)被訪問(access)的文件
    -amin n: 查找系統(tǒng)中最后 n 分鐘被訪問(access)的文件
    -ctime n: 查找系統(tǒng)中最后n*24小時(shí)被改變文件狀態(tài)(chmod)的文件
    -ctmin n: 查找系統(tǒng)中最后 n 分鐘被改變文件狀態(tài)(chmod)的文件
    -mtime n:查找系統(tǒng)中最后n*24被改變文件數(shù)據(jù)的文件
    -mmin n: 查找系統(tǒng)中**最后 n 分鐘被改變文件數(shù)據(jù)的文件 **
    -------------------------------------------------------------------------------------------------------------------------
    -nogroup: 查找無有效所屬組的文件,即該文件所屬的組在 /etc/groups中不存在
    -nouser: 查找無有效屬主的文件,即該文件的屬主在/etc/passwd中不存在
    -newer file1 ! file2: 查找文件更改時(shí)間比 file1 但是比 file2 舊的文件
    -------------------------------------------------------------------------------------------------------------------------
    -type:查找某一類型的文件,比如:
    -type b: 塊設(shè)備文件
    -type d: 目錄
    -type c: 字符設(shè)備文件
    -type p: 管道文件
    -type l: 符號(hào)連接文件
    -type f: 普通文件
    -------------------------------------------------------------------------------------------------------------------------
    -size n[c]: 查找長度為 n 塊的文件,帶有 c 表示文件長度以字節(jié)計(jì)
    -depth: 在查找文件時(shí),首先查找當(dāng)前目錄中的文件,然后再在其子目錄中查找
  • 使用實(shí)例:
    • 在當(dāng)前目錄查找后綴為 log 的文件
    find -name "*.log" 
    
    • 按照目錄或文件的權(quán)限來查找文件: 查找權(quán)限為777的文件
    find /opt/soft/test -perm 777
    
    • 按照文件大小查找文件: 查找當(dāng)前目錄大于1K的文件
    find . size +1000c -print
    

**********************************************************************************************************
**********************************************************************************************************
當(dāng)使用find查找出后,還可以進(jìn)一步的操作,這里用到 exec

  • -exec參數(shù)后面跟command 命令,其終止是以;為結(jié)束標(biāo)志的,所以這句話后面的分號(hào);是不可缺少的,考慮到各個(gè)系統(tǒng)中分號(hào)會(huì)有不同的意義,所以前面加上反斜杠\;

  • 花括號(hào){}代表前面find查找出來的文件名

  • 使用實(shí)例:

    • ls -l命令放在find命令的-exec選項(xiàng)中 : find命令匹配到了當(dāng)前目錄下的所有普通文件,并在-exec選項(xiàng)中使用ls -l命令將它們列出。
    find . -type f -exec ls -l {} \;
    
    • 在目錄中查找更改時(shí)間在n日以前的文件并刪除它們
    find . type f -mtime +14 -exec rm {} \;
    

    在shell中用任何方式刪除文件之前,應(yīng)當(dāng)先查看相應(yīng)的文件,一定要小心!當(dāng)使用諸如mv或rm命令時(shí),可以使用-exec選項(xiàng)的安全模式。它將在對每個(gè)匹配到的文件進(jìn)行操作之前提示你。

    • 在目錄中查找更改時(shí)間在n日以前的文件并刪除它們,在刪除之前先給出提示
    find . -name "*.log" -mtime +5 -ok rm {} \;
    

    在上面的例子中, find命令在當(dāng)前目錄中查找所有文件名以.log結(jié)尾、更改時(shí)間在5日以上的文件,并刪除它們,只不過在刪除之前先給出提示。 按y鍵刪除文件,按n鍵不刪除。

    • 嵌入使用 grep 命令
    find /etc -name "passwd*" -exec grep "root" {} \;
    

    find命令首先匹配所有文件名為“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后執(zhí)行g(shù)rep命令看看在這些文件中是否存在一個(gè)root用戶。

    • 查找文件移動(dòng)到指定目錄
    find . -name "*.cpp" -exec mv {} ./test \;
    
    • 用exec選項(xiàng)執(zhí)行cp命令
    find . -name "*.cpp" -exec cp {} ./test \;
    
  • find默認(rèn)查找當(dāng)前目錄和子目錄,通過maxdepth限制只查當(dāng)前目錄

    find . -maxdepth 1 -type f -name "*.php"
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容