天天看點

linux find指令

linux find指令

在linux的日常管理中,find的使用頻率很高,熟練掌握對提高工作效率很有幫助。

find的文法比較簡單,常用參數的就那麼幾個,比如-name、-type、-ctime等。初學的同學直接看第二部分的例子,如需進一步了解參數說明,可以參考find的幫助文檔。

find文法如下:

find(選項)(參數)
常用例子
test 根據檔案名查找
find . 列出目前目錄以及子目錄下的所有檔案
find . -name "11.png" 找到目前目錄下名字為11.png的檔案
find . -name "*.jpg" 找到目前目錄下所有的jpg檔案
find . -name ".jpg" -o -name ".png" 找到目前目錄下的jpg檔案和png檔案
find . ! -name "*.png" 找出目前目錄下不是以png結尾的檔案
根據正規表達式查找
find . -regex "./*[0-9]+.png" 找到目前目錄下,檔案名都是數字的png檔案。
find . -path "wysiwyg" 找出目前目錄下,路徑中包含wysiwyg的檔案/路徑
  • 通過-type進行檔案類型的過濾。
    • f 普通檔案
    • l 符号連接配接
    • d 目錄
    • c 字元裝置
    • b 塊裝置
    • s 套接字
    • p Fifo
根據檔案類型查找 & 限制搜尋深度
find . -type f -path "wysiwyg" 查找目前目錄下,路徑中包含wysiwyg的檔案
find . -maxdepth 1 -name "*.png" 找出目前目錄下所有的png,不包括子目錄。
find . -mindepth 2 -maxdepth 2 -name "*.png" 相對應的,也是mindepth選項
  • 通過-size來過濾檔案尺寸。支援的檔案大小單元如下
    • b —— 塊(512位元組)
    • c  —— 位元組
    • w —— 字(2位元組)
    • k —— 千位元組
    • M —— 兆位元組
    • G —— 吉位元組
根據檔案大小
find . -type f -size +100M 找出目前目錄下檔案大小超過100M的檔案

根據通路/修改/變化時間

支援下面的時間類型。

通路時間(-atime/天,-amin/分鐘):使用者最近一次通路時間。

修改時間(-mtime/天,-mmin/分鐘):檔案最後一次修改時間。

變化時間(-ctime/天,-cmin/分鐘):檔案資料元(例如權限等)最後一次修改時間。

舉例,找出1天内被修改過的檔案

find . -type f -mtime -1
找出最近1周内被通路過的檔案

find . -type f -atime -7
将日志目錄裡超過一個禮拜的日志檔案,移動到/tmp/old_logs裡。

find . -type f -mtime +7 -name "*.log" -exec mv {} /tmp/old_logs \;
注意:{} 用于與-exec選項結合使用來比對所有檔案,然後會被替換為相應的檔案名。

另外,\;用來表示指令結束,如果沒有加,則會有如下提示

find: -exec: no terminating ";" or "+"      

根據權限

通過-perm來實作。舉例,找出目前目錄下權限為777的檔案

find . -type f -perm 777
找出目前目錄下權限不是644的php檔案

find . -type f -name "*.php" ! -perm 644
根據檔案擁有者
找出檔案擁有者為root的檔案

find . -type f -user root
找出檔案所在群組為root的檔案

find . -type f -group root
找到檔案後執行指令
通過`-ok`、和-`exec`來實作。差別在于,`-ok`在執行指令前,會進行二次确認,`-exec`不會。      

看下實際例子。删除目前目錄下所有的js檔案。用-ok的效果如下,删除前有二次确認

➜  find find . -type f -name "*.js" -ok rm {} \;
"rm ./1.js"?      
find . -type f -name "*.js" -exec rm {} \;      
touch {1..9}.txt
echo "hello" > 1.txt
find . -empty