Wie kann ich die Anzahl der Dateien (in einem Verzeichnis), die eine bestimmte Zeichenfolge enthalten, als Eingabe in bash / sh zählen?
18
grep -l "string" * | wc -l
wird nach "string" im Inhalt aller Dateien im Arbeitsverzeichnis suchen und Ihnen mitteilen, wie viele übereinstimmten.
grep -lr "string" directory | wc -l
Wenn Sie keine rekursive Suche wünschen, können Sie die Option find with maxdepth verwenden:find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
Beachten Sie, dass diese zweite Option langsamer ist als grep.grep
Der Parameter s-l
gibt nur die passenden Dateinamen aus$PATTERN
undwc
kann diese anschließend zählen.quelle
Erläuterung: Hierbei wird nach der Anzahl der Dateien gesucht, deren Inhalt "pattern_to_look_for" enthält und nicht nach deren Dateinamen (wie bei Wags Antwort). Anhand Ihrer Frage ist schwer zu erkennen, wonach Sie suchen.
quelle
find . ! -name . -prune -type f
tun, wie den Stern durch so etwas zu ersetzen (verpassen Sie nicht die Backticks). Dieser Befehl listet nur die Dateien im Ordner auf.Dies funktioniert in Bash mit jedem Dateinamen:
Erläuterung:
grep
Die-Z
Option von gibt jedes Ergebnis mit einem ␀-Byte-Trennzeichen aus. Dieses Zeichen darf nicht Teil eines Dateinamens sein. Wir können also einfach die Anzahl der Trennzeichen zählen, um die Anzahl der Dateien zu ermitteln.tr
.wc
.quelle