grep時排除指定的檔案和目錄

2021-08-14 22:02:06 字數 4390 閱讀 9800

litin@linuxservice:~/android/allwinner/cqa64_android_v5.1/android/device$ grep "/proc/sys/kernel/printk" . -rn

grep: ./softwinner/tulip-common/.git/svn: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/logs: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/objects: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/hooks: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/rr-cache: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/description: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/config: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/refs: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/info: 沒有那個檔案或目錄

grep: ./softwinner/tulip-common/.git/packed-refs: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/svn: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/logs: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/objects: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/hooks: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/rr-cache: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/description: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/config: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/refs: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/info: 沒有那個檔案或目錄

grep: ./softwinner/common/.git/packed-refs: 沒有那個檔案或目錄

./softwinner/tulip-t1/init.sun50iw1p1.rc:51: write /proc/sys/kernel/printk 0

grep: ./softwinner/tulip-t1/.git/svn: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/logs: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/objects: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/hooks: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/rr-cache: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/description: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/config: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/refs: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/info: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1/.git/packed-refs: 沒有那個檔案或目錄

./softwinner/tulip-t1_v1/init.sun50iw1p1.rc:51: write /proc/sys/kernel/printk 0

grep: ./softwinner/tulip-t1_v1/.git/svn: 沒有那個檔案或目錄

grep: ./softwinner/tulip-t1_v1/.git/logs: 沒有那個檔案或目錄

雖然help中說「--exclude」可以忽略檔案和目錄,可是實際測試中發現並不能忽略目錄。所以,要排除目錄,還得用「--exclude-dir」

例如:

grep -rn --exclude-dir=build_* --exclude-dir=kernel --exclude-dir=drivers --exclude=*.out 'abcdefg' .

grep --exclude-dir=".svn" u_boot_cmd * -nr --exclude="cscope.out" --exclude="tags"

在當前目錄下查詢所有「abcdefg」的字串,但不在以「build_」開頭的目錄、「kernel」和「dirvers」中查詢,同時忽略所有以「out」為字尾的檔案。

grep簡介(熟悉的同學可以直接省略這一部分):

全稱是global search regular expression_r(re) and print out the line,即全文搜尋正規表示式,並把匹配的結果列印出來,是linux下非常強大的文字搜尋工具。

因為是命令列工具,它可以靈活地指定匹配模式、選項和要匹配的目標檔案,如果結合linux下特有的管道命令" | ",其功能要比windows自帶的搜尋工具和一些windows下文字編輯器強大很多。

由於工作要求在linux環境下進行c++開發,接觸linux時間尚淺,沒有遇到一款功能較為齊全且較為順手的ide,因此檢視源**時很多功能需要手動在bash下完成,比如常常需要檢視乙個函式在整個原始碼庫中的呼叫情況

grep -r 'function_name' * 

(*表示當前目錄下所有檔案,-r表示遞迴查詢,使用的模式較為簡單,僅作參考)

由於現在的很多專案都使用subversion作為版本管理工具,因此每個原始碼目錄下都會有乙個.svn目錄,其中包含了很多原始碼資訊。不出意外,你很快會得到滿螢幕的列印資訊,但是其中大部分的資訊都來自於 .svn 目錄下的檔案。

有如下兩種選擇可以去除來自 .svn 目錄的結果資訊:

1.使用管道進行雙層「過濾」,其中第二次grep使用了-v選項,即逆向匹配,列印出不匹配的行

grep -r 'function_name' * | grep -v '.svn'

2.或者更簡單一些,直接使用--exclude-dir選項,即指定排除目錄,注意svn前的\.

grep -r --exclude-dir=\.svn 'function_name' *

的確,通過簡單的選項設定,我們達到了過濾.svn目錄的功能,但是每次都要輸入 --exclude-dir=\.svn 的選項,似乎太麻煩了一點,幸運的是linux下靈活的配置檔案可以解決這一切:

開啟~/.bashrc(這是bash的當前使用者配置檔案),在檔案的最上方新增這樣一條:

export grep_options="--exclude-dir=\.svn"

(注意 = 的前後不能有空格,不然在載入該配置檔案時會提示錯誤)

export grep_options="--exclude-dir=\.svn --exclude-dir=\.git --exclude=tags --exclude=cscope\.out"

儲存並關閉,同時在命令列鍵入如下命令:

source ~/.bashrc(讓bash重新讀取指令碼)

當然,你也可以簡單地關閉shell並重新開啟乙個shell視窗

參考:--exclude=file_pattern skip files and directories matching file_pattern

--exclude-from=file skip files matching any file pattern from file

--exclude-dir=pattern directories that match pattern will be skipped.

刪除檔案排除指定檔案或者目錄方法 linux

有時候更新 的時候需要保留一些配置檔案,或者某些特殊目錄就需要這樣的操作。刪除資料夾內所有檔案保留部分檔案 只能是當前目錄下的檔案或資料夾能保留 以當前目錄為基準 保留一檔案 一資料夾 rm rf ls egrep v config.js dist 以當前目錄為基準 刪除某一類 rm rf ls p...

如何cp目錄時忽略指定的目錄和檔案

在備份ltedecoder程式時,需要把此目錄拷由到bak目錄下,但decoder目錄下有個大檔案,不需要備份,還有日誌問題,也不需要備份,如何實現呢?方法 cd source dir find name snapshot prune o print0 cpio pmd0 dest dir 此段的意...

tar打包時排除一些檔案或者目錄

用tar打包時排除檔案 可以使用 exclude引數 如 tar cvfz backup 1.tar.gz opt data exclude resource 在打包 opt data時就排除了resource命名的目錄和檔案。如果想不包含部分的特定檔案列表,可以把不包含的檔案放到乙個檔案ext.t...