Ich weiß, dass dies ein alter Thread ist, aber ich bin darüber gestolpert und dachte, ich würde meine Methode teilen, die ich als eine sehr schnelle Möglichkeit gefunden habe, find
zu verwenden um nur nicht-binäre Dateien zu finden:
find . -type f -exec grep -Iq . {} \; -print
Die -I
Option zu grep weist es an, Binärdateien und den .
sofort zu ignorieren Option zusammen mit -q
wird es sofort Textdateien zuordnen, so dass es sehr schnell geht. Sie können den -print
ändern zu einem -print0
zum Anschluss an einen xargs -0
oder etwas, wenn Sie sich Sorgen um Leerzeichen machen (danke für den Tipp, @lucas.werkmeister!)
Außerdem ist der erste Punkt nur für bestimmte BSD-Versionen von find
erforderlich wie unter OS X, aber es schadet nichts, wenn Sie es die ganze Zeit dort haben, wenn Sie dies in einen Alias oder so etwas einfügen möchten.
BEARBEITEN :Wie @ruslan richtig betonte, der -and
kann weggelassen werden, da es impliziert ist.
Basierend auf dieser SO-Frage:
grep -rIl "needle text" my_folder
Warum ist es unhandlich? Wenn Sie es häufig verwenden müssen und es nicht jedes Mal eingeben möchten, definieren Sie einfach eine Bash-Funktion dafür:
function findTextInAsciiFiles {
# usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text
}
legen Sie es in Ihren .bashrc
und dann einfach ausführen:
findTextInAsciiFiles your_folder "needle text"
wann immer Sie wollen.
BEARBEITEN um die Bearbeitung von OP widerzuspiegeln:
Wenn Sie Mime-Informationen ausschneiden möchten, können Sie der Pipeline einfach eine weitere Stufe hinzufügen, die Mime-Informationen herausfiltert. Dies sollte funktionieren, indem nur das genommen wird, was vor :
steht :cut -d':' -f1
:
function findTextInAsciiFiles {
# usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text | cut -d ':' -f1
}