03_查找和檢索

find

  • 根據(jù)文件名查找
    find pathname -options [-print -exec -ok -name -type...]
  1. 在目錄中搜索文件,path指定目錄路徑,系統(tǒng)從這里開(kāi)始沿著目錄樹(shù)向下查找文件。它是一個(gè)路徑列表,相互用空格分離,如果不寫(xiě)path,那么默認(rèn)為當(dāng)前目錄。Expression 是find命令接受的表達(dá)式,find命令的所有操作都是針對(duì)表達(dá)式的。
  2. 一條最常用的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的文件,并按格式顯示

注意:

  1. -exec表示對(duì)結(jié)果集執(zhí)行二次命令
  2. *表示通配符
  3. ?表示只匹配一個(gè)字符
  4. \;固定語(yǔ)法,表示結(jié)束符
  5. -type按類(lèi)型來(lái)搜索

grep

  • 根據(jù)內(nèi)容檢索
    grep [options] PATTERN [FILE...]
  1. 在指定文件中搜索特定的內(nèi)容,并將含有這些內(nèi)容的行輸出到標(biāo)準(zhǔn)輸出。若不指定文件
    名,則從標(biāo)準(zhǔn)輸入讀取。
  • [options]部分包含的主要參數(shù):
-I:不區(qū)分大小寫(xiě)(只適用于單字符)。
-h:查詢(xún)多文件時(shí)不顯示文件名。
-l:查詢(xún)多文件時(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]
  1. 它的作用是將參數(shù)列表轉(zhuǎn)換成小塊分段傳遞給其他命令,以避免參數(shù)列表過(guò)長(zhǎng)的問(wèn)題
  2. 在使用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命令一起使用。
  3. find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項(xiàng)那樣。這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。
  4. 查找系統(tǒng)中的每一個(gè)普通文件,然后使用xargs命令來(lái)測(cè)試它們分別屬于哪類(lèi)文件:
    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"  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容