Linux基礎:find命令總結

本文只總結一些經常使用的用法,更詳細的說明見man findinfo findexpress

find命令

find命令經常使用來查找文件或目錄,能夠根據給定的路徑和表達式查找所需的文件或目錄。該工具是由findutils包提供的。服務器

原理

find是從左向右的順序處理多個expression,所以expression的先後順序不一樣會形成不一樣的搜索性能差距。
find的搜索機制是根據expression返回的true/false決定的,每搜索一次都會判斷一次,只有評估的最終結果爲true纔算是找到,並切入到下一個搜索點。工具

語法格式

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
  • 默認path爲當前路徑,若服務器負載較高,儘可能不要在高峯期使用find命令
  • 默認actions是-print

expression

expression分爲三種:options、test、action。對於多個表達式,find是從左向右處理的,因此表達式的先後順序不一樣會形成不一樣的搜索性能差距。性能

test

find解析完語法以後,開始搜索文件,在搜索過程當中,檢測到的文件都會被test expression進行測試,符合條件的將被保留下來。測試

參數 說明
-name 按名稱查找
-size 按大小查找
-user 按文件屬主查找
-type 按類型查找
-mtime 按照文件的更改時間查找
-atime 按照文件的訪問時間查找
-perm 按照文件權限查找
-regex 按照正則表達查找

大多數狀況下,-name足以解決許多問題,碰到複雜的狀況,可使用正則-regex。
須要注意的是-regex不是匹配文件名,而是匹配完整的文件名(包括路徑)debug

action

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方式刪除文件。

相關文章
相關標籤/搜索