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天以前的文件或日志。

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

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

mark

第一種刪除方式:-exec

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


mark

第二種刪除方式:-ok

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的區別

區別一:

-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM