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