搜尋所有包含文字的文件

搜尋所有包含文字的文件

使用Busybox,如何透過一堆目錄遞歸地在一堆檔案中搜尋表達式,但只查看文字檔案?

我們不知道文件的後綴是什麼;它可能是.sh,它可能什麼都沒有,也可能是別的東西。我正在考慮以某種方式基於編碼進行搜索,儘管我也不太確定編碼是什麼。

我已經嘗試過,busybox grep -r但它也會搜尋二進位文件,這浪費了很多時間。

答案1

grep--binary-files支援將二進位檔案視為binary,text或 的選項without-match。最後一個選項應該跳過二進位。它相當於grep -I.我做了一個測試,看來Busyboxgrep支援-I跳過二進位。

grep在確定文件是二進制還是文本時並不“神奇”:它只是檢查前幾個字節以查看它們是否是文本,並假設文件的其餘部分也是如此(根據man grep)。


附註:可以透過比較head -1 myfile檔案是否等於來模擬這一點head -1 myfile | strings。如果file可用,則更加依賴,但它不在 Busybox 中,如果主要使用 Busybox,則很可能不在系統上。

答案2

二進位檔案與結構體有什麼區別

struct MyBin
{
    byte a;
    byte b;
    byte c;
}

與價值觀

myBin.a = 70;
myBin.b = 111;
myBin.c = 111;

以及帶有文字的文字檔案Foo

所有文字檔案都是一個二進位文件,您可以使用稱為字元編碼(ASCII、UTF-8 等)的特殊查找代碼來解釋它。因此,沒有簡單的方法可以區分“二進位”和“文字檔”。

可能有一種方法可以排除設置了執行位的文件,或者僅搜索文件大小以下的文件(我懷疑您的文本文件超過 1 MB),但我對如何過濾 grep 結果沒有足夠的知識舉個例子說明如何做。

相關內容