find 命令是Uxin/Linux命令行工具箱中最棒的工具之一。該命令對於編寫shell腳本所起到的做用不可小視,可是大多數人卻沒法最大程度發揮它的功效。如今咱們來討論find的大多數常見的用法。git
預備知識: find命令工做方式以下:沿着文件層次結構向下遍歷,去匹配符合條件的文件,執行相應的操做。 **正則表達式
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ find . -print
解釋:打印當前目錄下全部文件和目錄列表,-print能夠忽略,find命令仍會打印出文件名。 如今咱們已經學會了find最多見的用法,下面來看一下find命令其它的參數。shell
根據文件名或正則表達式進行搜索express
$ find /home/admin -name "*.txt" -print
解釋:使用-name查找/home/admin目錄下全部的.txt文件,並打印出來,find命令還有一個參數是-iname(忽略字母大小寫),與name相似,只不過匹配時會忽略大小寫。工具
2、匹配多個條件中的一個,能夠採用OR條件操做spa
$ find . \( -name "*.txt" -o -name "*.log" \) -print
解釋:上面代碼會打印出全部.txt和.log文件,find命令可以匹配全部這兩類文件。 \( \)用於將-name ".txt" -o -name ".log" 視爲一個總體。命令行
3、否認參數code
$ find ! -name "*.txt" -print
解釋:上面的find命令可以匹配全部不以.txt結尾的文件名。it
4、基於目錄深度的搜索-maxdepthio
$ find . -type f -maxdepth 1 -name "*.txt" -print
解釋:以上命令,只在當前目錄層級搜索全部.txt文件,並打印出來。find命令是沿着文件層次向下搜索,有些時候咱們只須要在當前的目錄進行搜索,無須再繼續向下查找,對於這種狀況,咱們使用深度選項來限制find命令向下查找的深度。若是隻容許find在當前目錄中查找,深度能夠設置爲1,向下兩級,深度能夠設置爲2,以此類推。
5、根據文件類型搜索
$ find . -type d -print
解釋:列出全部的目錄
$ find . -type f -print
解釋:列出全部的文件
$ find . -type l -print
解釋:列出全部符號連接
type參數匹配所須要的文件類型:
文件類型 類型參數 普通文件 f 符號連接 l 目錄 d 字符設備 c 塊設備 b 套接字 s FIFO p
6、根據文件時間進行搜索 Unix/Linux 文件系統中的每個文件都有三種時間戳:
訪問時間(-atime):用戶最近一次訪問文件的時間
修改時間(-mtime):文件內容最後一次被修改的時間
變化時間(-ctime):最後一個修改權限的時間
在三個參數可做爲find的時間選項,用整數指定,單位是天,一般帶有-或+:
-表示小於,+表示大於
$find . -type -atime -7 -print
解釋:打印最近7天內被訪問過的全部文件
$find . -type -atime 7 -print
解釋:打印剛好在7天前被訪問過的全部文件
$find . -type -atime +7 -print
解釋:打印出訪問時間超過7天的全部文件
-atime -ctime -mtime單位都是基於天,還有一些其它參數是基於分鐘做文計算單位:
-amin (訪問時間)
-mmin(修改時間)
-ctime (變化時間)
$ find . -type -amin +7 -print
解釋:打印出訪問時間超過7分鐘的全部文件
7、基於文件大小的搜索
根據文件的大小,能夠這樣搜索:
$ find . -type f -size +2M
解釋:大於2M的文件
$ find . -type -size -2M
解釋:小於2M的文件
$find . -type -size 2M
解釋:等於2M的文件
find指定文件大小的參數有: b--塊(512字節)
c--字節
w--字(2字節)
k--1024字節
M--1024K字節
G--1024M字節
8、刪除匹配的文件
-delete能夠用來刪除find查找到的匹配文件。
$find . -type f -name "*.txt" -delete
解釋:刪除當前目錄下全部.txt文件
9、根據權限查找
$ find . -type f -name "*.txt" -perm 644 -print
解釋:查找當前目錄下全部.txt文件而且文件權限爲644的全部文件
10、根據用戶查找文件
$ find . -type f -user admin -print
解釋:打印出用戶admin擁有的全部文件
11、-exec參數
find命令能夠藉助選項-exec與其它命令進行結合。-exec算得上是find最強大的特性之一。
# find . -type f -user root -name '*.txt' -exec chown admin {} \;
解釋:用-user找出root擁有的.txt文件,而後用-exec更改全部權爲admin,它會被分析爲:chown admin filename.txt。
-exec以後能夠接任何命令。{}表示一個匹配。對於任何匹配的文件名,{}均會被該文件名所替換
$ find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
解釋:將10天前的.txt文件複製到OLD目錄中
$ find . -type f -name "*.txt" -exec printf "Test file : %s\n {} \";
解釋:查找到的.txt文件被{}所替換,-exec後跟的命令爲printf,因此執行結果應該爲:
Test file: test1.txt
Test file: test2.txt
...等。
12、find跳過特定的目錄
$ find . \( -name ".git" -prune \) -o \( -type f -print \)
解釋:以上命令打印出不包括在.git目錄中的全部文件名稱
( -name ".git" -prune )的做用用於進行排除,它指明瞭.git目錄應該排除在外,而( -type f -print )指明瞭須要執行的動做。