本文只總結一些經常使用的用法,更詳細的說明見man find和 info find。express
find命令經常使用來查找文件或目錄,能夠根據給定的路徑和表達式查找所需的文件或目錄。該工具是由findutils包提供的。服務器
find是從左向右的順序處理多個expression,所以expression的先後順序不一樣會形成不一樣的搜索性能差距。
find的搜索機制是根據expression返回的true/false決定的,每搜索一次都會判斷一次,只有評估的最終結果爲true纔算是找到,並切入到下一個搜索點。工具
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
expression分爲三種:options、test、action。對於多個表達式,find是從左向右處理的,因此表達式的先後順序不一樣會形成不一樣的搜索性能差距。性能
find解析完語法以後,開始搜索文件,在搜索過程當中,檢測到的文件都會被test expression進行測試,符合條件的將被保留下來。測試
參數 | 說明 |
---|---|
-name | 按名稱查找 |
-size | 按大小查找 |
-user | 按文件屬主查找 |
-type | 按類型查找 |
-mtime | 按照文件的更改時間查找 |
-atime | 按照文件的訪問時間查找 |
-perm | 按照文件權限查找 |
-regex | 按照正則表達查找 |
大多數狀況下,-name足以解決許多問題,碰到複雜的狀況,可使用正則-regex。
須要注意的是-regex不是匹配文件名,而是匹配完整的文件名(包括路徑)。debug
actions部分通常都是執行某些命令,或實現某些功能。日誌
參數 | 說明 |
---|---|
-delete | 刪除文件 |
-exec command ; | -exec 參數後面跟的是 command 命令,它的終止是以「;」爲結束標誌的,因此這句命令後面的分號是不可缺乏的,考慮到各個系統中分號會有不一樣的意義,因此前面加反斜槓 |
-ok command ; | 相似於-exec,但在執行命令前會交互式進行詢問,若是不一樣意,則不執行命令並返回false,若是贊成,則執行命令,但執行的命令是從/dev/null讀取輸入的 |
使用-name參數查看/etc目錄下面全部的.conf結尾的配置文件:code
find /etc -name '*.conf'
使用-size參數查看/etc目錄下面大於2M的文件:io
find /etc -size +2M
搜索當前目錄下七天內被訪問過的全部文件:table
find . -type f -atime -7
找出/var/log下不是以.log結尾的文件:
find /var/log/ -type f ! -name '*.log'
找出/opt/logs下包含ab2019-05並以.log結尾的文件:
find /opt/logs/ -regex '.*ab.*2019-05.*.log'
查看當前目錄全部文件的屬性:
find . -type f -exec ls -l { } \;
找到/opt/logs下7天之前的日誌文件並刪除它們:
# 方法一 find /opt/logs -name '*.log' -mtime +7 -exec rm -rf {} \; # 方法二 find /opt/logs -name '*.log' -mtime +7 -delete # 方法三 find /opt/logs -name '*.log' -mtime +7 -ok rm -rf {} \;
在生產環境人工執行命令時,儘可能使用-ok方式刪除文件。