通过grep查找文件

时间:2017-04-13 15:17:26

标签: bash shell grep ksh

我正在尝试通过find发送从file -bgrep命令的输出,忽略我在regex中定义的特定文件。据我所知,我认为你无法将输出输出到file。 你有什么想法我怎么能不使用任何外部文件? 我不需要使用grep来忽略文件,但我需要使用指定的正则表达式来忽略文件和实用程序file的输出,所以如果有另一个选项,我会对它开放。

提前致谢:)

我尝试了什么:

find dir -type f -exec file -b {} \;

这对我有用,但不会忽略任何文件

find dir -type f -exec grep -v 'file.' {} \; -exec file -b {} \;

作为第一个例子,但打印出我不需要的文件内容

编辑:我需要忽略文件名和路径,而不是file

的输出

EDIT2:这是我的文件夹

dir
dir/a
dir/a/b
dir/a/b/c
dir/a/b/c/file
dir/a/b/filec
dir/a/fileb
dir/filea

每个文件都是ASCII文本的类型,我想要的输出是使用此正则表达式'file(a|b)'来忽略名为fileafileb的文件,而不是名为file的文件和filec不适合正则表达式,所以我的命令所需的输出将是

ASCII text
ASCII text

3 个答案:

答案 0 :(得分:1)

如果我做得不对,就像:

find dir -type f -exec file {} + | grep -Ev ':\s*ASCII text|empty'

将列出不是ASCII textempty的文件。

如果您需要提前grep文件名:

find dir -type f -print | grep -v 'pattern' | file -b -f - 

答案 1 :(得分:1)

使用find

find dir -type f ! -name 'file[ab]' -exec file -b {} \;

或许只是bash:

shopt -s globstar
for f in dir/**/file[^ab]; do
    file -b "$f"
done

答案 2 :(得分:1)

如果您想忽略模式,您可以使用!运算符,它的工作方式如下:

find -type f ! -name "file[ab]"