我必须按文件实用程序对目录和子目录中的文件进行排序,并制作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”等。
答案 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*"
。这需要一个全面的表达,而不是正则表达式。