昨天看到羣裏在不少羣友討論find命令,那麼今天我就和你們聊聊工做中的find命令的使用:
算法
1、find語法sql
Usage:find PATHNAME [-option] [-exec|-ok command] {} \;數據庫
PATHNAME:查找的路徑名vim
[option]:可選擇要匹配的參數bash
[-exec|-ok command]:將查找的文件執行command操做oracle
{}:查找到的文件名ide
\;:反斜槓表明轉義,分號表明結束符spa
2、find參數日誌
-nameblog
按文件名字查找
-perm
按文件權限查找
-user
按文件屬主查找
-group
按文件屬組查找
-nouser
查找無有效屬主的文件,即文件的屬組在/etc/groups中不存在
-nogroup
#查找無有效屬組的文件,即文件的屬主在/etc/groups中不存在
-mtime(mmin) -n +n
按文件更改時間來查找文件,-n指n天(分鐘)之內,+n指n天(分鐘)之前
-atime(amin) -n +n
按文件訪問時間來查找文件,-n指n天(分鐘)之內,+n指n天(分鐘)之前
-ctime(cmin) -n +n
按文件建立時間來查找文件,-n指n天(分鐘)之內,+n指n天(分鐘)之前
-never f1 !f2
查找更改時間比f1新但比f2舊的文件
-type [b| d| c| p| l| f]
查找塊設備,目錄,字符設備,管道、符號連接、普通文件
-size n[c]
查長度爲n塊[或n字節]的文件
-depth
查找於某一類型文件系統中的文件,這些文件系統類型一般可在/etc/fstab中找到
-mount
查文件時不跨越文件系統mount點
-follow
若是遇到符號連接文件,就跟蹤連接所指的文件
-prune
忽略某個目錄,若是同時使用了-depth選項,那麼-prune選項將被find命令忽略。
3、find案列
一、查找指定目錄下大於300M的文件,並將其移動到指定的路徑中
# find ~ -size +300M # find ~ -size +300M -exec mv {} ~/sql/ \;
二、查找指定目錄下大於300M的文件,並將其刪除的兩種方式
# find ./ -size +300M -delete # find ./ -size +300M -exec rm -rf {} \;
三、查找指定目錄下大於1G而小於1.5G的文件
# find ./ -size +1G -size -1.5G
四、查找指定目錄下非.sh結尾的文件的兩種方法
# find ./ -not -name '*.sh' # find ./ ! -name '*.sh'
五、刪除7天前對數據庫的備份文件
# find /bakcup/ -type f -name '*.sql' -mtime +7 -exec rm -rf {} \;
六、查找當前目錄下以.sh結尾的文件,可是排除子目錄爲script目錄下的文件
# find . -path './script' -prune -o -name '*.sh'
七、查找當前目錄下以.py結尾的文件,並將其修改成.pyc
# find ./ -name '*.py' -exec mv {} '{}c' \;
八、查找當前目錄下全部文件,並把文件中的hello字符串替換成Hello
# echo 'hello world!' > test01.txt # echo 'hello teacher!' > test02.txt # find ./ -type f -exec sed -i 's@hello@Hello@g' {} \;
4、find搭配日誌重點闡述
一、時間搜索
atime(access time):訪問時間;指的是文件最後讀取的事件,可使用touch命令更改當前時間
ctime(change time):變動時間;指的是文件自己最後被變動的事件,變動動做是chmod、chgrp、mv等
mtime(modify time):修改時間,指的是文件內容最後被修改的事件,修改動做echo重定向、vim等
二、時間語法
find PathName {-atime/-ctime/-mtime/-amin/-cmin/-mmin} [-/+]num
第一個參數:查找文件的路徑名
第二個參數:前面的字母a、c、m分別表示訪問、變動、修改;time爲日期,min爲分鐘
第三個參數:不應符號表示符合這個值得,'-'表示之內的,'+'表示之前的
三、時間小練習
查找當前目錄中,當天被訪問過的文件:時間單位爲day
# find ./ -atime 0
查找當前目錄中,距離此刻5分鐘之前10分鐘之內被修改過的文件:時間單位爲min
# find ./ -mmin -10 -min +5
另外補充一個額外的命令:xargs
此命令的使用很相似於find的exec參數,好比:
# find ./ -type f | xargs chmod 755 # find ./ -type f | xargs echo '' > /root/filename.log # find ./ -type f | xargs rm -rf
網上的一篇文章:
find mtime的事件算法:http://www.oracleblog.org/study-note/how-to-calculate-find-mtime/