Was prägnant Befehl kann ich verwenden, um alle Dateien zu finden, die KEINE Textzeichenfolge enthalten?
Ich habe dies (mit -v zum Invertieren der grep-Parameter) ohne Erfolg versucht:
find . -exec grep -v -l shared.php {} ;
Jemand sagte, das würde funktionieren:
find . ! -exec grep -l shared.php {} ;
Aber es scheint bei mir nicht zu funktionieren.
Diese Seite hat dieses Beispiel:
find ./logs -size +1c > t._tmp
while read filename
do
grep -q "Process Complete" $filename
if [ $? -ne 0 ] ; then
echo $filename
fi
done < t._tmp
rm -f t_tmp
Aber das ist umständlich und überhaupt nicht prägnant.
ps:Ich kenne das grep -L *
wird dies tun, aber wie kann ich den find-Befehl in Kombination mit grep verwenden, um ausgeschlossene Dateien zu finden, ist das, was ich wirklich wissen möchte.
pss:Ich bin mir auch nicht sicher, wie grep Unterverzeichnisse mit grep -L *
einschließen soll Syntax, aber ich möchte trotzdem wissen, wie man sie mit find
verwendet 🙂
Akzeptierte Antwort:
find . -type f | xargs grep -H -c 'shared.php' | grep 0$ | cut -d':' -f1
ODER
find . -type f -exec grep -H -c 'shared.php' {} ; | grep 0$ | cut -d':' -f1
Hier berechnen wir die Anzahl der übereinstimmenden Zeilen (mit -c
) in einer Datei, wenn die Anzahl 0 ist, dann ist es die erforderliche Datei, also schneiden wir die erste Spalte, d. h. Dateiname, aus der Ausgabe.