Schnellster Weg, um Text in Ordnern finden

stimmen
2

Ich war mit dem Rückgabewert fgrep -s 'text' /folder/*.txtzu finden , wenn ‚Text‘ in ist jede .txt - Datei in / Ordner / . Es funktioniert, aber ich finde es zu langsam für das, was ich brauche, wie wenn es für sucht ‚text‘ in allen Dateien vor mir eine Antwort zu geben.

Ich brauche etwas, das gibt mir schnell eine Ja / Nein-Antwort, wenn sie mindestens eine Datei mit dem ‚Text‘ findet. Wahrscheinlich ein awk-Skript.

Veröffentlicht am 30/12/2009 um 03:28
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
5

Wenn ich Ihre Frage richtig verstanden habe, möchten Sie:

fgrep -m1

Was nach einem Match beendet.

Beantwortet am 30/12/2009 um 03:37
quelle vom benutzer

stimmen
1

Damit können Sie Ihre Suche zu verkürzen , wenn es die Art ist , die auf der Grundlage würde Mopoke die Antwort. Dies stoppt nach dem ersten Spiel in der ersten Datei , in der sie gefunden hat:

# found=$(false)
found=1    # false
text="text"
for file in /folder/*.txt
do
    if fgrep -m1 "$text" "$file" > /dev/null
    then
        found=$?
        # echo "$text found in $file"
        break
    fi
done
# if [[ ! $found ]]
# then
#    echo "$text not found"
# fi
echo $found # or use exit $found

Edit : kommentierten einige Zeilen aus und machte ein paar andere Änderungen.

Wenn es eine große Anzahl von Dateien ist, dann ist das forscheitern könnte und Sie sollen eine Verwendung whileSchleife mit einem findverrohrt hinein.

Wenn alles , was Sie tun wollen herausfinden , ob es irgendwelche in einem Ordner unabhängig von den Inhalt der Datei TXT - Datei, dann so etwas wie das alles von selbst verwenden:

find /folder -name "*.txt"
Beantwortet am 30/12/2009 um 07:16
quelle vom benutzer

stimmen
0

Aufbauend auf den oben genannten Antworten, sollte dies tun, es denke ich?

find /folder -name \*.txt -exec grep "text" {}\;

Aber ich bin nicht sicher, ob ich volles Verständnis dafür, das Problem: ist ‚fgrep‘ dabei eine volle Tiefe Rekursion, bevor es beginnt die Ausgabe oder so etwas? Der Fund sollte berichten, it findet vielleicht so besser sein für das, was Sie brauchen, weiß nich.

[Bearbeiten, nicht getestet]: Ändern Sie den ‚grep‘ oben für ein Shell-Skript, das wie etwas tut:

grep "text" && exit 0 || exit 1

Um die wahre zu bekommen | false, was Sie arbeiten müssen (Sie werden mit diesem spielen müssen um, nicht genau die Schritte, die hier getestet - kein Zugriff auf Unix zur Zeit :-()

Beantwortet am 30/12/2009 um 11:15
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more