使用grep -v忽略find实用程序中的文件

时间:2017-03-27 13:16:12

标签: bash

我必须按文件实用程序对目录和子目录中的文件进行排序,并制作10种最常用文件类型的图表。它由

运行
bash myfile -i [FILE_ERE]

所以对于我的图表中应该忽略的每个文件和目录,FILE_ERE应该是正则表达式。例如,当找出

  

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

我的参数中的$ FILE_ERE是“dir”,它应该忽略每个带有“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”等。

1 个答案:

答案 0 :(得分:1)

一种解决方案是直接使用find 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*"。这需要一个全面的表达,而不是正则表达式。