我在一个文件夹(嵌套)中有数百万个文件。我需要从这些文件中扫描一个值并打印包含该值的行(比如LINE_TXT
)。早些时候,我曾经对每个文件进行 sed,但过去需要 45 分钟才能完成此操作。我之前的解决方案是这样的:
FILES=$(find $1 -type f -name 'filename.txt')
for f in $FILES
do
if [[ "$LINE" == *LINE_TXT* ]]; then
echo $LINE
fi
done
我发现 pipemill 是实现这一目标的最佳方式。我的主要解决方案是这样的:
makefifo mypipe
find $1 -type f -name 'filename.txt' | xargs cat > my pipe &
while read -r LINE
do
if [[ "$LINE" == *LINE_TXT* ]]; then
echo $LINE
fi
done << mypipe
运行时间约为 1 分钟。我可以进一步改进吗?