find
- 根據(jù)文件名查找
find pathname -options [-print -exec -ok -name -type...]
- 在目錄中搜索文件惠赫,path指定目錄路徑,系統(tǒng)從這里開(kāi)始沿著目錄樹向下查找文件故黑。它是一個(gè)路徑列表儿咱,相互用空格分離庭砍,如果不寫path,那么默認(rèn)為當(dāng)前目錄混埠。Expression 是find命令接受的表達(dá)式怠缸,find命令的所有操作都是針對(duì)表達(dá)式的。
- 一條最常用的find命令--在當(dāng)前目錄及子目錄下查找所有以file開(kāi)頭的文件名钳宪。
$ find . -name 'file*'
$ find \/ -name 'vimrc'
$ find ~ -name '*.c'
$ find /usr/ -name "*tmp*" -exec ls -l { } \;
find ./ -name "*tmp" -ok rm { } \;
sudo find ./ -size +65M
//搜索大于65M的文件
sudo find ./ -size +65M -size -100M -exec ls -lh {} \;
//搜索大于65M的文件小于100M的文件揭北,并按格式顯示
注意:
-
-exec
表示對(duì)結(jié)果集執(zhí)行二次命令 -
*
表示通配符 -
?
表示只匹配一個(gè)字符 -
\;
固定語(yǔ)法,表示結(jié)束符 -
-type
按類型來(lái)搜索
grep
- 根據(jù)內(nèi)容檢索
grep [options] PATTERN [FILE...]
- 在指定文件中搜索特定的內(nèi)容使套,并將含有這些內(nèi)容的行輸出到標(biāo)準(zhǔn)輸出罐呼。若不指定文件
名,則從標(biāo)準(zhǔn)輸入讀取侦高。
- [options]部分包含的主要參數(shù):
-I:不區(qū)分大小寫(只適用于單字符)嫉柴。
-h:查詢多文件時(shí)不顯示文件名。
-l:查詢多文件時(shí)只輸出包含匹配字符的文件名奉呛。
-n:顯示匹配行及行號(hào)计螺。
-s:不顯示不存在或無(wú)匹配文本的錯(cuò)誤信息。
-v:顯示不包含匹配文本的所有行瞧壮。
-R: 連同子目錄中所有文件一起查找登馒。
- 比如到系統(tǒng)頭文件目錄下查找所有包含printf的文件
$ grep 'printf' /usr/include -R
xargs
- 從標(biāo)準(zhǔn)輸入建立和執(zhí)行命令行
xargs [OPTION] [command]
- 它的作用是將參數(shù)列表轉(zhuǎn)換成小塊分段傳遞給其他命令,以避免參數(shù)列表過(guò)長(zhǎng)的問(wèn)題
- 在使用find命令的-exec選項(xiàng)處理匹配到的文件時(shí)咆槽,find命令將所有匹配到的文件一起傳遞給exec執(zhí)行陈轿。但有些系統(tǒng)對(duì)能夠傳遞給exec的命令長(zhǎng)度有限制,這樣在find命令運(yùn)行幾分鐘之后秦忿,就會(huì)出現(xiàn)溢出錯(cuò)誤麦射。錯(cuò)誤信息通常是“參數(shù)列太長(zhǎng)”或“參數(shù)列溢出”。這就是xargs命令的用處所在灯谣,特別是與find命令一起使用潜秋。
- find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部胎许,不像-exec選項(xiàng)那樣峻呛。這樣它可以先處理最先獲取的一部分文件,然后是下一批辜窑,并如此繼續(xù)下去钩述。
- 查找系統(tǒng)中的每一個(gè)普通文件,然后使用xargs命令來(lái)測(cè)試它們分別屬于哪類文件:
find . -type f | xargs file
查找usr目錄下名字以“tmp”開(kāi)頭的文件穆碎,將其詳細(xì)信息列出切距。
//錯(cuò)誤,結(jié)果是當(dāng)前目錄的ls -l信息
find /usr -name "tmp*" | ls -l
find /usr -name "tmp*" | xargs ls -l
find /usr -name "tmp*" -print0 | xargs -0 ls -l
- -print0表示輸出以null分隔(-print使用換行)惨远;-0表示輸入以null分隔谜悟。查找當(dāng)前目錄下话肖,文件名包含“bin”字串的文件,并在文件中搜索“printf”這個(gè)詞
find ./ -name "*bin*" | grep "printf"
find ./ -name "*bin*" | xargs grep "printf"
find ./ -name "*bin*" -print0 | xargs -0 grep "printf"