【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 \)