尝试查找大型ASCII文件时Bash脚本无法正常工作

时间:2014-11-06 18:49:30

标签: bash while-loop find

所以我要做的是找到大的ASCII文件,然后打印出文件的名称,然后打印多少行,但是当我启动脚本时,它找不到任何东西。

find / -type f -size +2000c -exec file {} \; 2>/dev/null | awk -F':' '/: ASCII text/ {print $1}' | while read FILENAME; do LINES="$(wc -l)"; if [ $LINES > 10000 ]; then echo $FILENAME && echo $LINES; fi; done

2 个答案:

答案 0 :(得分:0)

你错了什么?

if [ $LINES > 10000 ]此处>用于字符串比较。要使用数字比较,-gt必须用作

if [ $LINES -gt 10000 ]

答案 1 :(得分:0)

请试试这个:

find / -type f -size +2000c -print0 | xargs.exe -0 grep -Z -L -e '[^[:print:]]' 2>/dev/null | xargs -0 awk 'ENDFILE { if (FNR > 10000) { print FILENAME " " FNR } }'

我们的想法是使用 grep 过滤掉二进制文件,并使用过滤文件列表提供 awk ,最后过滤掉行数小于或等于10000的文件。

btw,它可以优雅地处理名称中包含空格的文件。