linux經常使用命令指南——查找文件我最強:find

2.3.2 查找文件我最強:find
2.3.2.1 find查找經常使用命令示例
find / -name 'wfy.txt'
# 從根目錄下開始查找文件wfy.txt

find . -name '*fy.txt'
# 當前目錄下,查找fy.txt後綴的文件
# 「.」表示當前目錄,"*"表示任意長度字符

find / -type f -size +500M
# 從根目錄開始查找,500M以上文件
# / :根目錄
# . : 當前目錄
# -type f: f爲普通文件類型,f改成d則是目錄文件,l則是符號連接文件,-type 還有其餘參數,不在這裏一一列舉
# -size +500M :500MB以上 
# 通常磁盤空間不夠,刪除垃圾文件時會使用到此命令

find . -type f -size +1k
# 查找當前文件夾下超過1k的文件,注意k是小寫。

find . -type f -mtime -30
# 查找當前目錄下30天以內修改過的文件
# -mtime:表明修改時間,最經常使用,相似參數有-atime、-ctime
# -atime:表明訪問時間,查看過就算
# -ctime:文件狀態改變時間
# -30:表明30天之內,30爲n,數字本身填寫
# +30:30天之前
# 30:距今第30天

find /var/log/ -mtime +30 -name '*.log'
# 查找指定目錄/var/log/ 下30天之前的log文件

find /etc ! -type f  
# 查找 /etc 目錄下不是普通文件的 文件
# "!":感嘆號,取反

find /etc ! -type l -mtime -30
# 查找/etc 目錄下不是符號連接文件,並在30天內被修改過的文件
 
find /etc -maxdepth 1 ! -type l -mtime -30
# 查找/etc 第一層目錄下不是符號連接文件的文件,並在30天內被修改過
# -maxdepth : 前面du學過,指定目錄層級,-maxdepth 1表明第1層,-maxdepth 2表明延伸到第二層

-maxdepth 可能有點很差理解,因此截了個示例圖運維

mark

2.3.2.2 使用find 組合命令:統計與刪除

基本經常使用的find命令都已經講完了,再說下運維中可能經常使用的一個組合命令,利用find刪除N天之前的文件或日誌。3d

先用wc -l來統計下log數量,再刪除看看日誌

find / -name '*.log' -mtime +300 | wc -l
# 從根目錄下開始搜索300天以前的log文件,並統計數量
# 「|」:管道符,將前面查到的數據做爲輸入源給後面的命令

mark

第一種刪除方式:-execcode

find / -name '*.log' -mtime +300 -exec rm {} \;
# 查找30天之前的log文件,使用-exec加rm將其刪除
# 再使用上面的命令從新查看一次
find / -name '*.log' -mtime +300 | wc -l


mark

第二種刪除方式:-okblog

find / -name '*.log' -mtime +200 -ok rm {} \;
# -ok : 詢問刪除,y刪除,n不刪除,回車默認不刪除

mark
mark

第三種刪除方式:xargs博客

依次執行查看結果效率

find / -name '*.log' -mtime +100 | wc -l

find / -name '*.log' -mtime +100 | xargs rm -f
# xargs : 命令傳遞參數過濾器,與管道符「|」一同使用,將前面的命令傳遞給後面的命令使用

find / -name '*.log' -mtime +100 | wc -l

mark

2.3.2.3 find與xargs的組合使用

對於50天前的log文件進行詳情查看搜索

find / -name '*.log' -mtime +50 | xargs ls -l
# 利用xargs + ls -l 命令來進行文件的詳細屬性查看

mark

移除50天前的文件技巧

mkdir /logback
# 建立根目錄下的 /logback文件夾

find / -name '*.log' -mtime +50 | xargs -i mv {} /logback
# 將50天前的全部log文件移動到 /logback 文件夾下
# xargs -i + {},將前面查找到的文件都做爲參數給mv命令執行

ls -l /logback
# 查看 /logback 下全部文件詳情

mark

2.3.2.4 find下xargs與exec的區別

區別一:im

-exec,是將查找到的結果文件名逐個傳遞給後面的命令執行,文件多會致使效率低;

xargs,則是一次性傳遞,效率較高,並可以使用-n參數控制傳遞文件個數。

區別二:

-exec,文件名有空格等特殊字符也照常處理;

xargs,處理特殊的文件名(例如文件名有空格)須要採用特殊的處理方式(find . -name "*edu" -pringt0| xargs -0 ls -l)

驗證區別一,示例以下:

find /logback -name '*.log'  -exec echo yaomaomao {} \;


find /logback -name '*.log'  | xargs echo yaomaomao

mark

能夠看到使用-exec每次得到一個文件輸出一次,xargs則只輸出了一行。

xargs還能夠用-n參數控制每次輸出的文件個數

find /logback -name '*.log'  | xargs -n5 echo yaomaomao

mark

能夠看到,每行輸出5個參數(文件名),不足的行輸出剩下的。

驗證區別二,示例以下:

touch yaomaomao.txt;touch "yaomaomao centOS 7";ll yaomaomao*
# 小技巧:使用「;」分號能夠一次性執行多個命令
# 注意:查看和建立帶有空格的文件時,使用引號括起來

mark

find . -name "yaomaomao*" -exec ls -lh {} \;
        # 正常查找出來

        find . -name  "yaomaomao*" | xargs ls -lh
        # 能夠看到使用此命令報找不到那個文件或目錄

        find . -name  "yaomaomao*" -print0 | xargs -0  ls -lh
        # 正常查找

mark

其實find還有不少強大的功能,截兩張圖你們就知道了
find1
find2

這本書就是我開頭推薦的《核心系統命令實戰》。

公衆號註冊的比較晚,沒有評論功能,因此通常用來發長文。
知識星球至關於技術朋友圈,有問題你們能夠提問,討論。

歡迎關注個人公衆號:姚毛毛的博客
公衆號

歡迎加入個人知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
--------------------------------------------------------
公衆號註冊的比較晚,沒有評論功能,因此通常用來發長文。
知識星球至關於技術朋友圈,有問題你們能夠提問,討論。

歡迎關注個人公衆號:姚毛毛的博客
公衆號

歡迎加入個人知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
[知識星球]mark

相關文章
相關標籤/搜索