所以我要做的是找到大的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
答案 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,它可以优雅地处理名称中包含空格的文件。