2016-05-27 8 views
0

Ich möchte Dateien in einem Verzeichnis zählen, das in seinem Namen und Inhalt ein bestimmtes Wort enthält.Linux: Dateien zählen, die ein Wort in seinem Namen und Inhalt enthält

find ./test -maxdepth 1 -type f -iname "*main*" | wc -l 

Ein gegebenes Snippet zählt Dateien, die "main" im Namen enthalten. Wie man es ändert, um zu überprüfen, ob es auch "Haupt" in seinem Inhalt enthält?

Antwort

1

Schleife über Ihre Dateien und verwenden grep -q die grep Ausgabe unterdrückt:

for file in `find ./test -maxdepth 1 -type f -iname "*main*"`; do 
    if grep -q main $file; then 
     wc -l $file 
    fi 
done 

Ausgabe

5 ./test/foo_main 
0

find ./test -maxdepth 1 -type f -iname "*main*" -exec grep -q main {} \; -exec printf '\n' \; | wc -l

-exec printf '\n' \; statt -print gegen Zeichen Dateinamen mit Newline schützt.