Die Verwendung von find mit dem sh-Befehl funktioniert nicht - weitere Fragen

Die Verwendung von find mit dem sh-Befehl funktioniert nicht - weitere Fragen

Im Anschluss an die zuvor gepostete Anfrage Verwenden von „find“ mit dem Befehl „sh“ funktioniert nicht

find . -type f -name '*FW*' -exec grep -iEq 'chmod.*archive|archive.*chmod' {} \; -ls

Dieser Befehl konnte die Dateien nicht finden, wenn der Text „archive“ oder „chmod“ in mehreren Zeilen vorkommt. Er kann die Dateien jedoch scannen, wenn der Text „chmod“ und „archive“ in derselben Zeile vorkommt.

Habe es also mit diesem Befehl versucht, aber es gibt nicht das gewünschte Ergebnis

1> find . -type f -name '*FW*' -exec grep -iEq 'chmod.*' {} \; -ls -exec grep -iEq '.*archive.*' {} +

Warum liefert dieser Befehl nicht das gewünschte Ergebnis?

Habe es mit diesem Befehl versucht, es gibt das erwartete Ergebnis, aber es schlägt zeitweise mit diesem Fehler fehl: „find: ‚pcregrep‘ beendet durch Signal 11“

2> find . -type f -name '*FW*' -exec pcregrep -qM 'chmod.*(\n|.)*archive.*' {} \; -ls

Warum tritt dieser Fehler auf?

Antwort1

Ihr zweiter Befehl in der Frage gibt Ihnen nicht die richtige Ausgabe, da die Reihenfolge der Tests, die Sie verwenden, findwichtig ist. Der Befehl gibt nur Ergebnisse für Dateien aus, die die chmodZeichenfolge enthalten, da der andere grepBefehl ausgeführt wirdnach -ls(und erzeugt keine Ausgabe).

Sie möchten Dateien finden, die sowohl die Zeichenfolgen chmodals auch enthalten archive.

find . -type f -name '*FW*' \
    -exec grep -Fiq chmod {} \; \
    -exec grep -Fiq archive {} \; -ls

Dies ruft grep -Fiq chmodalle Dateien auf, die FWin ihrem Namen haben, und dann grep -Fiq archivediejenigen, in denen die erste grepeine Übereinstimmung gefunden hat. Wenn die zweite grepauch etwas gefunden hat, -lswird das wirksam.

verwandte Informationen