防止 cat 打开二进制文件

防止 cat 打开二进制文件

有没有办法在尝试cat二进制文件时阻止或提示您?

我经常需要处理日志文件或数据文件,其中一些是文本,另一些不是。很容易混淆,而且cat出于显而易见的原因,意外尝试二进制文件会很烦人。

理想情况下,我想要一个别名cat,当它检测到文件(很有可能)不是纯文本时会提示您。

答案1

我真的不认为这是值得的,因为你可以在cat做某事之前进行检查,但你可以在你的函数中设置一个函数~/.bashrc来执行此操作:

cat(){
    for i in "$@"
    do
        if  file --mime "$i" | grep "charset=binary" >/dev/null 
        then
            printf "File %s is binary, skipping\n" "$i" >&2
        else
            /bin/cat "$i"
        fi
    done
}

它将运行file以检查文件的 mime 类型是否为二进制charset=binary,如果是,它将跳过它。如果该测试失败,则该文件不是二进制文件,并且将/bin/cat被调用。您可以像使用常规 cat 一样使用它:

$ cat /bin/bash /etc/os-release
File "/bin/bash" is binary, skipping
PRETTY_NAME="Linux Mint LMDE"
NAME="Linux Mint LMDE"
ID=linuxmint
ANSI_COLOR="1;31"

答案2

除了什么说这里你可以只需使用less 代替cat

如果文件不是常规文件,它会提示,并提供一些附加信息,例如 zip、rar 存档中的文件列表……

顺便说一下,您甚至可以使用它来转换非读取字符,而无需在每行末尾cat -v添加。$

答案3

如果您调用file-i,它将返回 mime 类型,允许您确定它是否是文本。

file -i file.name | grep text/ && cat file.name

如果file.name是二进制&&则不执行cat,如果是纯文本则执行。

这现在匹配脚本和其他未标记为“纯文本”的“文本”文件

答案4

例如,将其保存为脚本newcat.sh,并使其可执行:

#!/bin/bash
result=`file $1 | grep -c "binary"`
if [ "$result" -gt 0 ]
then
    echo "executable file"
else
        cat $1
fi

然后使用它作为./newcat.sh filename

相关内容