Linux 經常使用命令--find

find 命令是Uxin/Linux命令行工具箱中最棒的工具之一。該命令對於編寫shell腳本所起到的做用不可小視,可是大多數人卻沒法最大程度發揮它的功效。如今咱們來討論find的大多數常見的用法。git

預備知識: find命令工做方式以下:沿着文件層次結構向下遍歷,去匹配符合條件的文件,執行相應的操做。 **正則表達式

find用法:**

用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ find . -print

解釋:打印當前目錄下全部文件和目錄列表,-print能夠忽略,find命令仍會打印出文件名。 如今咱們已經學會了find最多見的用法,下面來看一下find命令其它的參數。shell

1、-name 參數

根據文件名或正則表達式進行搜索express

$ find /home/admin -name "*.txt" -print

解釋:使用-name查找/home/admin目錄下全部的.txt文件,並打印出來,find命令還有一個參數是-iname(忽略字母大小寫),與name相似,只不過匹配時會忽略大小寫。工具

2、匹配多個條件中的一個,能夠採用OR條件操做命令行

$ find . \( -name "*.txt" -o -name "*.log" \) -print

解釋:上面代碼會打印出全部.txt和.log文件,find命令可以匹配全部這兩類文件。 \( \)用於將-name ".txt" -o -name ".log" 視爲一個總體。code

_ 3、否認參數_it

$ find ! -name "*.txt" -print

解釋:上面的find命令可以匹配全部不以.txt結尾的文件名。io

4、基於目錄深度的搜索-maxdepthtest

$ 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 )指明瞭須要執行的動做。

相關文章
相關標籤/搜索