2017-04-13 123 views
1

我试图通过grep命令发送输出从findfile -b忽略我在正则表达式中定义的特定文件。据我所知,我认为你不能输出到file。 你有什么想法,我怎么能做到这一点,而不使用任何外部文件? 我不需要使用grep来忽略文件,但我需要使用指定的正则表达式来忽略文件和实用程序file的输出,所以如果有另一个选项,我可以使用它。通过grep查找文件

感谢提前:)

有什么我想:

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

这对我的作品,但不忽略任何文件

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

当先例子,但是版画出文件的内容,我不需要

编辑:我需要忽略文件名和pa部份,不输出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文件,但没有不适合在正则表达式命名filefilec文件,所以从我的命令所需的输出将

ASCII text 
ASCII text 

回答

1

如果我underdstand权,somethi吴象:

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 - 
+0

对不起,这不是我的意思,我需要忽略的文件/路径,而不是特定类型@ jm666 –

+0

@HynekBernard刚添加的解决方案文件的名称。 – jm666

+0

编辑了这个问题,我不知道如何在命令的“中间”使用grep来将它转换为文件 –

1

随着发现

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

或者仅仅是庆典:

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

不错,尽管我建议在find命令中使用'+'而不是'\;'来处理(通常)_single_'file'调用。也许值得一提的是,GNU和BSD'find'具有非标准的'-regex' /'-iregex'测试用于真正的基于正则表达式的匹配。 – mklement0

1

如果你想忽略模式你可以使用!运算符,它会起作用摹这样的:

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