0

我一直想知道是否有一个多用途的流解压器。我只找到了一个工具,但它只能处理文件而不是流,尝试将它与命名管道一起使用以错误“不是常规文件”结尾我尝试了一些尝试做一个脚本来做它。

#/bin/sh
tempfile=$(mktemp)
fileformat=$(dd bs=1 count=20 2>/dev/null | tee $tempfile | file - | cut -f 2 -d " ")
case $fileformat in

  LZMA)
    (cat $tempfile; rm $tempfile; cat) |lzma -d
    ;;

  gzip)
    (cat $tempfile; rm $tempfile; cat) |gzip -d
    ;;

  bzip2)
    (cat $tempfile; rm $tempfile; cat) |pbzip2 -d
    ;;

  lzop)
    (cat $tempfile; rm $tempfile; cat) |lzop -d -f
    ;;

  LZ4)
    (cat $tempfile; rm $tempfile; cat) |lz4 -d -c
    ;;

  XZ)
    (cat $tempfile; rm $tempfile; cat) |xz -d -f
    ;;

esac

它似乎工作,但我真的不喜欢代码。它对前 20 个字节使用临时文件。尝试将前 20 个字节放入一个变量中,最终会被忽略为 Null Bytes。此外,这只是对文件识别流需要多少字节的反复试验的猜测。而且我真的不喜欢没有检查解压缩器是否可用,尤其是 bzip2,其中有两个解压缩器 bzip2 和 pbzip2。

在我尝试扩展代码之前,我想知道它是否真的值得,或者是否已经有某种多用途的流解压器

问候。

4

0 回答 0