不包含给定字符串的文件数

ald*_*ado 7 shell grep files

我阅读了有关如何找出包含某个字符串的文件数的问题。这是可能的grep -l "string" * | wc -l

是否可以反转它,找到包含目标字符串的文件数?我尝试添加该-v选项,但这似乎没有输出正确的结果。

UVV*_*UVV 10

使用 GNU 或 OpenBSD grep

grep -L "string" ./* | grep -c /
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 9

另一种POSIX方式:

c=0
for f in *; do
  [ -d "$f" ] && continue
  { grep -q string || c=$(($c + 1)); } < "$f"
done
echo "$c"
Run Code Online (Sandbox Code Playgroud)

通过重定向命令组而不是grep单独重定向,我们可以避免将无法打开的文件(例如我们没有读取权限的文件,或者*当前目录中没有非隐藏文件)计为 1。

使用 GNU grep,相当于:

grep -d skip -L foo ./* | grep -c /
Run Code Online (Sandbox Code Playgroud)

请注意,您不能使用,wc -l因为文件名可以由多行组成。其./还避免了与启动文件名的问题-或者 -(这--不解决)。请注意,它会忽略点文件。