【问题标题】:Bash Script not working when trying to find large ASCII files尝试查找大型 ASCII 文件时,Bash 脚本不起作用
【发布时间】:2015-01-03 09:55:34
【问题描述】:

所以我要做的是找到大的 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

【问题讨论】:

  • LINES="$(wc -l)" 不是从 "$FILENAME" 读取的。

标签: bash while-loop find


【解决方案1】:

请试试这个:

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 的文件。

顺便说一句,它可以优雅地处理名称中带有空格的文件。

【讨论】:

    【解决方案2】:

    你做错了什么?

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

    if [ $LINES -gt 10000 ]

    【讨论】:

    • 更改后仍然没有找到任何东西。
    • 你为什么不用wc来代替呢?
    • if [ $LINES > 10000 ]; then ... 很乐意将您的当前目录留下一个名为10000 的空文件,因为> 不用于字符串比较,而是用于重定向。
    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2011-10-11
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多