對於文件查找,咱們最好用的仍是屬於find命令了,在說find命令以前,先把另外幾個查找命令介紹一下。數據庫
0x01 查詢命令介紹3d
0x02 find命令介紹code
在介紹以前,首先先了解一個特殊變量——PATHblog
PATH下存放着命令所在的路徑,咱們在執行命令的時候先會在PATH變量中從前到後挨個路徑進行查找,找到一條以後就直接中止了,因此就須要把想要先生效的路徑放到前面,每個路徑中間使用冒號進行分隔get
which命令博客
經過which命令,咱們能夠找到某一個命令所在的位置,它是經過PATH路徑進行查詢的it
whereis命令test
whereis命令也能夠跟which同樣搜索路徑,可是他還會搜索一些其餘的內容,它也是經過PATH路徑進行查詢的變量
若是隻想搜索二進制命令的話,須要增長 -b
參數date
locate命令
locate也能查詢命令的相關路徑以及幫助等,可是它不是從PATH路徑中進行遍歷的,它是從Linux中的一個數據庫mlocate.db
進行查詢的,mlocate.db數據庫位於/var/lib/mlocate/mlocate.db
,因爲它所展現的內容太多,因此這裏我使用 -n
參數來指定顯示的行數
那咱們再舉一個例子來進行查詢
咱們在root目錄下建立一個balabala.txt的文件
而後使用下列命令來進行查詢
locate balabala
明明存在這個文件爲何查不到呢?
這是因爲locate進行查找是在mlocate.db
數據庫進行查找的,可是咱們剛剛建立的這個文件並不在這個數據庫中,因此咱們須要使用updatedb
進行更新數據庫
在更新完後就能夠正常查詢到了,通過查詢能夠得知updatedb會天天自動執行一次
可是這個命令咱們通常是不會用到的
與上面的幾個命令相比,find的速度是最慢的,由於find是從硬盤裏進行查找的,可是find命令也是咱們最經常使用的一個命令,在尋找咱們想要的文件時是最快捷的。
對於find命令的使用有一個大體的公式
find 要查找的位置 [限制條件] 要查找的文件名
舉個例子,從根目錄下尋找全部的文件名中包含balabala的文件
若是想在查詢完成以後,再接着對它執行一些命令的話,在後面再加上 -exec
參數就能夠了
find / -type f -name "*balabala*" -exec ls -l {} \;
在-exec
參數的後面跟上須要執行的command命令就能夠了,最後以分號做爲結束的標誌,可是考慮到各個系統中的分號可能會表明不一樣的意義,因此加上了反斜槓進行轉義。
其中花括號的含義是表明find命令所查詢到的內容,而且花括號兩邊都是須要有空格的
這條命令還有一種等價的寫法,那就是利用管道
和xargs
xargs
有兩個做用,一個就是加-n參數對內容進行分組,另外一個做用就是獲取前一條命令的輸出,而後做爲輸入傳給後面的命令,這個聽起來跟管道符是同樣的,可是若是沒有xargs和管道符的配合是不能實現部分命令的執行的。
看一下後面的這個例子就明白了
若是沒有管道符和xargs
的配合,後面的命令將直接是在當前目錄下直接執行,也就是說從管道符過來的數據,ls根本沒有理會,而是按照本身的意願執行了本來的功能。
順便再把xargs的分組功能介紹一下
再舉一個例子來理解一下上面的這個內容
咱們查找一下當前目錄下的全部以 .txt
來結尾的文件,而後並將其內容進行輸出
咱們也能夠按照修改時間對文件進行查找,加入 -mtime
參數就能夠了
爲了方便find的按時間查找,咱們用下面的命令來生成一批文件
首先先了解一下date
命令
若是想要修改時間的話,咱們可使用 date -s 來修改時間,可是絕對不建議你們這樣改,這樣可能會致使某些功能出現問題。
而後咱們生成一批文件,從十月十五號到十月二五號天天建立一個文件
注意後面的時間都是以今天是十月二十號做爲標準的
for n in `seq 15 20`;do date -s "2019/10/$n";touch test_$n.txt;done
咱們接着說find命令的按時間查詢
查詢三天之前建立的文件
find . -type f -name "*.txt" -mtime +3
查詢第三天建立的文件
find . -type f -name "*.txt" -mtime 3
查詢最近三天的文件
find . -type f -name "*.txt" -mtime -3
經常使用到的查找命令就是這些了,若是有其餘須要的話,再查看幫助文件就能夠了。
本文由博客一文多發平臺 OpenWrite 發佈!