2017-03-27 49 views
0

忽略来自find实用程序的文件我必须通过文件实用程序对我的目录和子目录中的文件进行排序,并制作10个最常用文件类型的图表。它运行使用grep -v

bash myfile -i [FILE_ERE] 

所以FILE_ERE应该是每个文件和目录的正则表达式,应该在我的图中被忽略。例如,当发现是

testdirectory/hello1
testdirectory/hello2
testdirectory/NEWDIR/hello3
hello4

和论证我的$ FILE_ERE是 “目录”,它应该忽略每一个文件以 “DIR”,输出是

hello4

我有这个

input_name=$(file -b `find $DIR -type f | grep -v "$FILE_ERE"` | sort | uniq -c | sort -n -r | head | sed 's/^[ \t]*//' | cut -d' ' -f 2-) 
input_number=$(file -b `find $DIR -type f | grep -v "$FILE_ERE"` | sort | uniq -c | sort -n -r | head | sed 's/^[ \t]*//' | cut -d' ' -f1) 

但我的正则表达式是不是一些投入正常工作,就像FILE_ERE =“H”等

+0

ROLF,最喜欢的家庭作业theese days ... http://stackoverflow.com/q/43028856/632407 – jm666

回答

1

一种解决方案是直接用找到ignore your pattern

使用globing expresssion:FILE_ERE =“h *”(所有以h开头的文件)

find "${DIR}" -type f ! -name "${FILE_ERE}" -exec file -b {} + 

使用正则表达式:FILE_ERE =“^ /h。 $”(开始使用h所有文件):

find "${DIR}" -type f ! -regex "${FILE_ERE}" -exec file -b {} + 

注意,它通常是更好地使用-exec处理find输出

编辑:。您的建议,感谢@chepner

注意:正则表达式与所有文件路径非常匹配,所以要匹配从9开始的所有文件,您需要使用正则表达式^.*/9.*。您还可以使用-name "9*"。这需要表达式而不是正则表达式

+0

'-exec文件-b {} +'会减少对'file'的调用次数“{}”周围的引号是可选的)。 – chepner