【问题标题】:/bin/sh Need to identify file content type/bin/sh 需要识别文件内容类型
【发布时间】:2018-07-29 23:44:56
【问题描述】:

我正在开发busybox,只有/bin/sh 可用。 我想了解我正在使用我的脚本处理的文件是否被视为 ASCII(只需阅读并做我需要做的事情)或 gzip(所以先解压缩然后做我需要做的事情)。

这里的“文件”命令会很完美,但不幸的是它不可用,因此我不知道要调用什么过程,因为我正在处理的输入文件可以是任何一种格式。

我想知道是否有一个我在这里缺少的简单解决方法来找出这个...

【问题讨论】:

  • 你认为什么是“非 ASCII”?您是否只需要测试您的文件是否没有值在 0-127 之外的字符?
  • 您可以检查寻找相同的幻数文件(IOW,制作您自己的文件,该文件只能判断文件是“gzip 还是非 gzip”)
  • 顺便说一句,file 是否可用与您是否使用/bin/sh 完全正交——这是由您的操作系统提供的命令,而不是您的 shell。
  • @CharlesDuffy : 只是好奇——你知道没有file 的操作系统吗(可能除了非常古老的 SCO Unix 或 SunOS 等)?我很惊讶 OP 声称 file 不存在。
  • @user1934428,我希望它是一个嵌入式系统。许多buildroot-style 系统映像构建工具的可用性被确定为单独的切换;我当然已经构建了没有file(或完全没有libmagic)的。

标签: shell file sh busybox


【解决方案1】:

您的问题暗示您一个gunzip 命令,并且正在尝试确定是否需要调用它。

一个可以告诉你...的命令是gzip

contents_of_file() {
  local file="$1"
  if gzip -t <"$file" >/dev/null 2>&1; then
    gunzip -c <"$file"
  else
    cat <"$file"
  fi
}

也就是说,如果文件没有不可打印的非空白字符,您也可以询问grep

is_plain_text() {
  if grep -q -e '[^[:graph:][:space:]]' <"$1"; then
    echo "$1 has non-ASCII characters"
  else
    echo "$1 is plain text"
  fi
}

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2011-08-02
    • 2017-09-05
    • 2016-12-18
    相关资源
    最近更新 更多