Suche nach allen Dateien, die Text enthalten

Suche nach allen Dateien, die Text enthalten

Wie können Sie mit Busybox rekursiv in einer Reihe von Dateien und Verzeichnissen nach einem Ausdruck suchen, dabei aber nur Textdateien durchsuchen?

Wir wissen nicht, wie die Dateierweiterung aussehen wird. Es könnte .sh sein, es könnte nichts sein, es könnte etwas anderes sein. Ich habe überlegt, die Suche irgendwie auf der Kodierung basieren zu lassen, obwohl ich mir auch nicht ganz sicher bin, wie die Kodierung aussehen würde.

Ich habe es versucht busybox grep -r, aber es durchsucht auch Binärdateien, was viel Zeit verschwendet.

Antwort1

grepunterstützt die Option, --binary-filesBinärdateien als binary, textoder zu behandeln without-match. Die letzte Option sollte Binärdateien überspringen. Sie ist gleichbedeutend mit grep -I. Ich habe einen Test gemacht und es scheint, dass Busybox das Überspringen von Binärdateien grepunterstützt .-I

grepist nicht „magisch“, wenn es darum geht zu bestimmen, ob eine Datei binär oder Text ist: Es prüft einfach die ersten paar Bytes, um zu sehen, ob es sich um Text zu handeln scheint oder nicht, und nimmt das Gleiche für den Rest der Datei an (gemäß man grep).


Randbemerkungen: Man könnte dies emulieren, indem man z. B. vergleicht, ob head -1 myfileeiner Datei gleich ist head -1 myfile | strings. Wenn fileverfügbar ist, ist es noch abhängiger, aber es ist nicht in Busybox und höchstwahrscheinlich nicht auf dem System, wenn Busybox hauptsächlich verwendet wird.

Antwort2

Was ist der Unterschied zwischen einer Binärdatei mit der Struktur

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

mit den Werten

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

Und eine Textdatei mit dem Text Foo?

Eine Textdatei ist nichts anderes als eine Binärdatei, die Sie mithilfe spezieller Suchcodes, sogenannter Zeichenkodierungen (ASCII, UTF-8 usw.), interpretieren. Es gibt also keine einfache Möglichkeit, „Binärdateien“ von „Textdateien“ zu unterscheiden.

Es gibt möglicherweise eine Möglichkeit, Dateien auszuschließen, bei denen das Ausführungsbit gesetzt ist, oder nur nach Dateien unter einer bestimmten Dateigröße zu suchen (ich bezweifle, dass Ihre Textdatei größer als 1 MB ist), aber ich weiß nicht genug darüber, wie man die Grep-Ergebnisse filtert, um ein Beispiel dafür zu geben.

verwandte Informationen