Ich habe die Frage gelesen , wie man die Anzahl der Dateien herausfindet, die eine bestimmte Zeichenfolge enthalten. Dies ist möglich mit grep -l "string" * | wc -l
.
Ist es möglich, dies zu invertieren, indem die Anzahl der Dateien ermittelt wird , die die Zielzeichenfolge nicht enthalten? Ich habe versucht, die -v
Option hinzuzufügen , aber dies scheint nicht das richtige Ergebnis zu liefern.
set -- *
Verwendung$#
und Schleife mitfor i do ...
. Sie könnenwc -l
Dateien nicht zählen, da Dateinamen aus mehreren Zeilen bestehen können.Je nachdem, wie viele Dateien Sie durchsuchen möchten, ist es ein guter Rat, sich ack-grep anzusehen . Der Grund dafür ist, dass
ack-grep
es viel schneller als good'ol istgrep
und die CLI nahezu identisch ist.ack-grep -Lur "some string" * | wc -l
quelle
Mit
zsh
:Dadurch werden die Namen der Dateien, die nicht
PATTERN
in einem Array enthalten sind, gespeichert und die Anzahl der Elemente im Array zurückgegeben. Es werden Glob-Qualifizierer verwendet :.
Wählt nur reguläre Dateien aus (HinzufügenD
, um versteckte Dateien einzuschließen), wirdN
aktiviertnull glob
und die Zeichenfolge negated (^
)e
:^e_'grep -q PATTERN $REPLY'_
hebt die Auswahl der Dateinamen auf, für die der Shell-Code zwischen den Anführungszeichen zurückgegeben wirdtrue
.quelle