如何找出当前目录中不包含单词foo(使用grep)的文件?


当前回答

如果你的grep有-L(或——files-without-match)选项:

$ grep -L "foo" *

其他回答

下面的命令不需要find通过使用第二个grep来过滤svn文件夹。

grep -rL "foo" ./* | grep -v "\.svn"

下面的命令可以帮助你过滤包含子字符串“foo”的行。

cat file | grep -v "foo"

您可以单独使用grep(没有find)来完成。

grep -riL "foo" .

这是对grep上使用的参数的解释

     -L, --files-without-match
             each file processed.
     -R, -r, --recursive
             Recursively search subdirectories listed.

     -i, --ignore-case
             Perform case insensitive matching.

如果你使用l(小写),你将得到相反的(文件匹配)

     -l, --files-with-matches
             Only the names of files containing selected lines are written

当grep没有-L选项时(例如IBM AIX),只有grep和shell时的另一种选择:

for file in * ; do grep -q 'my_pattern' $file || echo $file ; done

find *20161109* -mtime -2|grep -vwE "(触发器)"

你可以在"find"下指定过滤器,在"grep -vwE"下指定排除字符串。如果你也需要对修改后的时间进行过滤,请在find下使用mtime。