1つのフォルダー(ネストされた)に何百万ものファイルがあります。これらのファイルから値をスキャンし、この値を含む行を印刷する必要があります(たとえば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
私は、パイプミルがこれを達成するための最良の方法であると考えました。私の主な解決策は次のようなものです:
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分です。これをさらに改善できますか?