前言: 先闡述下find指令是干嘛的,為什麼要來研究他呢?
find指令是Linux下一個很重要的操作,因為linux是一個“一切皆文件”的操作系統,find(查找文件)指令就尤為重要了,在windows操作系統下,我們查找一個文件可以直接在計算機中搜索文件,但是linux操作系統的文件是不帶後綴的,同樣,Linux下的find功能相對與windows來說,強大了很多。
Linux下的查找指令有多個,下面我們主要講下locate和find兩個指令
locate指令是對其生成的數據庫進行遍歷(生成數據庫的命令(updatedb)).這一特性決定了用locate查找文件的速度會很快,那麼locate速度既然能夠快速的查找,那為什麼還需要find指令呢?因為locate指令只能對文件進行模糊匹配,精確度不是很高。
#locate的簡單操作選項:
-i //查找文件的時候不區分大小寫 比如:locate -i tmp
-n //只顯示查找結果的前N行 比如:locate -n 5 t
切入我們的正題:
find指令的用法總結:根據文件名或正則表達式匹配搜索 (1),通過文件名查找
操作選項:-name
操作舉例:先看下我們的當前目錄使用pwd指令,然後在當前目錄下mkdir一個文件tmp,然後使用find ./ -name tmp指令就可以找到tmp文件了,使用find ./ -name 'tmp*'可以查找所有包含tmp的文件。
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/80/5B/wKiom1c-fRfwLewaAABn2wptlQE123.png" title="1.png" alt="wKiom1c-fRfwLewaAABn2wptlQE123.png" />650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/80/5B/wKiom1c-fpvTt6FGAAA3XAOelpU141.png" title="2.png" alt="wKiom1c-fpvTt6FGAAA3XAOelpU141.png" /> (2)通過正則表達式查找
操作選項:!
操作舉例:!故名思意,就是否定一個查找條件的,與邏輯-not非類似,
find ./ ! '*.c' -print查找文件名不為.c的文件,並打印出來
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/80/5B/wKiom1c-hZ7TILrgAADYHxhl4TA177.png" title="31.png" alt="wKiom1c-hZ7TILrgAADYHxhl4TA177.png" />
其他正則表達式還有如下一些:
-a 與條件
-o 或條件
-not 非條件(此參數的功能類似於否定參數‘!’)
2.根據文件大小查找-size n:[c] 查找文件長度為n塊的文件,帶有c時表示文件長度以字節計。
b——塊(512字節); c——字節; w——字(2字節);
k——千字節 ; M——兆字節; G——吉字節。
操作選項:-size -n
操作舉例:find ~ -size -100k查找小於100k的文件
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/80/59/wKioL1c-iQnxOfThAAD1FxmB8wM193.png" title="4.png" alt="wKioL1c-iQnxOfThAAD1FxmB8wM193.png" />
操作選項:-size +n
操作舉例:find ~ -size +100k查找小於100k的文件
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/80/5C/wKiom1c-iMGwZSySAAA03IfZmbM838.png" title="5.png" alt="wKiom1c-iMGwZSySAAA03IfZmbM838.png" />
操作選項:-size n
操作舉例:find ~ -size 100k查找為100k的文件
我的系統下沒有等於100k的文件。
3.根據文件深度查找操作選項:maxdepth
操作舉例:find -maxdepth 2 -name tmp在深度為2的目錄中查找文件tmp
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/80/5C/wKiom1c-i1GDL9zhAAA7sP8mmRQ142.png" title="6.png" alt="wKiom1c-i1GDL9zhAAA7sP8mmRQ142.png" />
操作選項:mindepth
操作舉例:find -mindepth 1 -maxdepth 3 -name tmp在深度為1至3中查找文件tmp
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/80/5C/wKiom1c-jH_Dfa-LAACpBsxuHpI928.png" title="7.png" alt="wKiom1c-jH_Dfa-LAACpBsxuHpI928.png" />
4.按文件權限查找操作選項:
-perm 按照文件權限查找
-user (或者是-uid n n是用戶賬號的ID) 按照文件所有人查找
-group (或者是-gid n n是組名的ID)按照文件的所屬組查找
操作舉例:find -type f -perm 777
find -type f -user 777
find -type f -group 777(這裡就不一一截圖了,看了上面那麼多想必大家都會了)
5.按文件類型查找 文件類型 類型參數
普通文件 f
符號文件 l
目 錄 d
字符設備 c
塊設備 b
套接字 s
管道文件 p
操作選項:-type
操作舉例:find . -type p、find . =type f等等
6.根據文件時間查找Linux文件系統中的三種時間戳:
▲訪問時間(-atime):用戶最近一次訪問文件的時間;
▲修改時間(-mtime):文件內容最後一次被修改的時間。
▲變化時間(-ctime):文件元數據(metadata,例如權限或所有權)最後一次改變的時間。
操作選項:-atime 、-mtime 、-ctime(用+、-來表示大於和小於)
操作舉例:find ./ -atime -1、find ./ -atime +1、find ./ -mtime -2、find ./ -ctime等等
特殊:find ./ -newer tmp ----> 查找比test.c還要新的文件
7.find與xargs結合使用xargs參數 將標准輸入轉換成命令行參數
操作選項:-atime 、-mtime 、-ctime(用+、-來表示大於和小於)
操作舉例:find -type f -name "*.txt" -print0 |xargs -0 rm -f(將找到的文件刪除,xargs -0將\0作為 輸入定界符);
find -type f -name "*.c" -print0 |xargs -0 -1(統計所有C程序文件的行數)
本文出自 “滴水” 博客,請務必保留此出處http://10740329.blog.51cto.com/10730329/1775362