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 可能有點很差理解,因此截了個示例圖運維
基本經常使用的find命令都已經講完了,再說下運維中可能經常使用的一個組合命令,利用find刪除N天之前的文件或日誌。3d
先用wc -l來統計下log數量,再刪除看看日誌
find / -name '*.log' -mtime +300 | wc -l # 從根目錄下開始搜索300天以前的log文件,並統計數量 # 「|」:管道符,將前面查到的數據做爲輸入源給後面的命令
第一種刪除方式:-execcode
find / -name '*.log' -mtime +300 -exec rm {} \; # 查找30天之前的log文件,使用-exec加rm將其刪除 # 再使用上面的命令從新查看一次 find / -name '*.log' -mtime +300 | wc -l
第二種刪除方式:-okblog
find / -name '*.log' -mtime +200 -ok rm {} \; # -ok : 詢問刪除,y刪除,n不刪除,回車默認不刪除
第三種刪除方式:xargs博客
依次執行查看結果效率
find / -name '*.log' -mtime +100 | wc -l find / -name '*.log' -mtime +100 | xargs rm -f # xargs : 命令傳遞參數過濾器,與管道符「|」一同使用,將前面的命令傳遞給後面的命令使用 find / -name '*.log' -mtime +100 | wc -l
對於50天前的log文件進行詳情查看搜索
find / -name '*.log' -mtime +50 | xargs ls -l # 利用xargs + ls -l 命令來進行文件的詳細屬性查看
移除50天前的文件技巧
mkdir /logback # 建立根目錄下的 /logback文件夾 find / -name '*.log' -mtime +50 | xargs -i mv {} /logback # 將50天前的全部log文件移動到 /logback 文件夾下 # xargs -i + {},將前面查找到的文件都做爲參數給mv命令執行 ls -l /logback # 查看 /logback 下全部文件詳情
區別一: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
能夠看到使用-exec每次得到一個文件輸出一次,xargs則只輸出了一行。
xargs還能夠用-n參數控制每次輸出的文件個數
find /logback -name '*.log' | xargs -n5 echo yaomaomao
能夠看到,每行輸出5個參數(文件名),不足的行輸出剩下的。
驗證區別二,示例以下:
touch yaomaomao.txt;touch "yaomaomao centOS 7";ll yaomaomao* # 小技巧:使用「;」分號能夠一次性執行多個命令 # 注意:查看和建立帶有空格的文件時,使用引號括起來
find . -name "yaomaomao*" -exec ls -lh {} \; # 正常查找出來 find . -name "yaomaomao*" | xargs ls -lh # 能夠看到使用此命令報找不到那個文件或目錄 find . -name "yaomaomao*" -print0 | xargs -0 ls -lh # 正常查找
其實find還有不少強大的功能,截兩張圖你們就知道了
這本書就是我開頭推薦的《核心系統命令實戰》。
公衆號註冊的比較晚,沒有評論功能,因此通常用來發長文。
知識星球至關於技術朋友圈,有問題你們能夠提問,討論。
歡迎關注個人公衆號:姚毛毛的博客
歡迎加入個人知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
--------------------------------------------------------
公衆號註冊的比較晚,沒有評論功能,因此通常用來發長文。
知識星球至關於技術朋友圈,有問題你們能夠提問,討論。
歡迎關注個人公衆號:姚毛毛的博客
歡迎加入個人知識星球,目前免費哦。
知識星球:姚毛毛的私密花園
[知識星球]