1. 程式人生 > >【shell】find命令及常見用法

【shell】find命令及常見用法

【背景】

find是linux中最實用的工具之一,用於搜尋符合一定條件的檔案。其工作方式為沿著目錄樹向下遍歷,匹配符合條件的檔案,執行相應的操作。

【命令形式】

find [path] [option] [action]

path:指定開始查詢的路徑

option:指定選項,一般是設定查詢的條件

action:指定動作,預設為print

【常見用法】

1.根據檔名進行搜尋

涉及選項:

(1) -name:設定需要查詢的檔名

(2)-iname:同上,但是不區分大小寫

例子:

在當前目錄下搜尋所有doc檔案:

find ./ -name "*.doc" c++

2.根據檔案型別進行搜尋

涉及選項:

(1)-type:設定檔案型別

檔案型別:

(1)f:普通檔案

(2)l:符號連結

(3)d:目錄

(4)c:字元裝置

(5)b:塊裝置

(6)s:套接字

(7)p:FIFO

例子:

在當前目錄下搜尋所有普通檔案:

find ./ -type f

3.根據檔案大小進行搜尋:

涉及選項:

(1)-size [+-]s:設定檔案大小限制,+/-分別代表大於/小於s

例子:

在當前目錄下找到大小為100k的檔案:

find ./ -size 100k

4.根據檔案時間進行搜尋

涉及選項:

(1)-[x]time [+-]n:x可選a/m/c,分別代表訪問時間/修改時間/屬性修改時間;+/-分別代表n天之前/之內。

(2)-[x]min [+-]n:同上,但時間單位換成分鐘。

例子:

在當前目錄下找到24小時之內改動過的檔案:

find ./ -mtime 0

5.根據檔案許可權進行搜尋

涉及選項:

(1)-perm [+-]p:設定許可權限制,+/-分別代表檔案需要完全包含/包含任一所設許可權

例子:

在當前目錄下找到含有SBIT許可權的檔案:

find ./ -perm +4000

【更多用法】

6.刪除匹配檔案

涉及選項:

(1)-delete

之前的例子都沒有使用可選的action,這是利用了預設是-print。如果需要將符合條件的檔案刪除,則使用-delete作為action部分。

例子:

刪除當前目錄下所有的doc檔案:

find ./ -name "*.doc" -delete

7.執行命令

涉及選項:

(1)-exec cmd:cmd可以替換成需要執行的命令。

例子:

將5天之前的log檔案刪除:

find ./ -mtime +5 -name "*.log" -exec rm -f {} \;

8.限定目錄深度

涉及選項:

(1)-maxdepth:限制最大深度

(2)-mindepth:限制最小深度

例子:

只在當前目錄搜尋doc檔案:

find ./ -maxdepth 1 -name "*.doc"

9.否定

可以使用!來將引數的含義取反。

例子:

將當前目錄下的非doc檔案列出:

find ./ ! -name "*.doc"

10.設定多條件

涉及選項:

(1)-a:表示多個條件之間的與關係

(2)-o:表示多個條件之間的或關係

例子:

搜尋doc檔案或者docx檔案:

find ./ \( -name "*.doc" -o -name "*.docx" \)

11.搜尋時跳過特定目錄

涉及選項:

(1)-prune:設定需要排除的檔案(prune本身為精簡的含義)

例子:

遞迴列印當前目錄下所有檔案,但不包括名為.git的檔案:

find ./ \( -name ".git" -prune \) -o \( -type f -print \)