通过 shell 脚本用 file 命令验证 ASCII 文件

jen*_*fer 5 shell-script

使用 file 命令,我需要验证许多文件是 ASCII 还是其他格式

有时我从文件命令中得到:

  file1: ASCII English text
Run Code Online (Sandbox Code Playgroud)

有时我从文件命令得到不同的答案

  file2: Non-ISO extended-ASCII English text, with very long lines
Run Code Online (Sandbox Code Playgroud)

我真的不确定是否还有其他语法不同的答案

我的问题是:

我编写了以下 ksh 语法来验证文件是否为 ASCII,但我不确定

以下语法是验证 ASCII 格式的最佳语法?

   [[ ` file  $some_file | grep –c ASCII ` = 1 ]] && print "you have ascii file for sure"
Run Code Online (Sandbox Code Playgroud)

如果有人有其他建议来确定验证 ASCII 格式!,我会很高兴看到

eph*_*ent 8

if LC_ALL=C grep -q '[^[:print:][:space:]]' file; then
    echo "file contains non-ascii characters"
else
    echo "file contains ascii characters only"
fi
Run Code Online (Sandbox Code Playgroud)

  • `LC_ALL=C` 强制 `grep` 将 `[[:print:]]` 视为“可打印的 ASCII”字符类。否则它意味着“可打印 <无论您当前的语言环境是什么>”,这可能是非 ASCII。例如,大多数 Linux 机器都设置了 UTF-8 语言环境,在这种情况下,`[[:print:]]` 将匹配作为有效 UTF-8 可打印字符的非 ASCII 字符序列。 (2认同)

Ian*_* C. 0

由于您正在使用代码解析输出,因此我建议使用-ion 选项file,以便它输出MIME类型而不是人类友好的字符串。MIME 类型输出更加规则,这使得在代码中处理起来更容易一些。

至于输出类型,查看man 文件说明:

/usr/share/file/magic
    Default list of magic numbers

/usr/share/file/magic.mime
    Default list of magic numbers, used to output  mime types
    when the -i option is specified.
Run Code Online (Sandbox Code Playgroud)

查看这些文件中它可以报告的所有 MIME 类型,以确定在解析file. 我怀疑您所关心的只是 MIME 类型以text/.