使用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 結果沒有足夠的知識舉個例子說明如何做。