IT技术博客大学习 共学习 共进步

compress指令并不是总是压缩文件

Linux|系统管理|WEB开发 2009-12-17 22:13:42 浏览 2,681 次

    用户观察到了一个很有意思的现象,某一个目录下10个小文件,每一个大概都只有几十个字节。都是纯文本。分别对这10个文件用compress指令压缩,结果发现其中一个压缩不成功,也没有给出任何报错信息。

    将该文件传送到AIX 5上,使用compress压缩,则给出”file not change”的提示,依然没有压缩。

    给文件重命名,也不行。另外创建一个文件,然后把文件内容复制过去,也不行。

    我尝试用strace跟踪了compress压缩该文件的过程。发现压缩的确做了,但是最后却执行了unlink的操作,也就是把已经压缩好的文件删除了。

    为什么要删除呢?先看看compress的帮助吧,发现有这样一个参数的说明:

     -f Forces output file to be generated, even if one already.

     exists, and even if no space is saved by compressing.

     If -f is not used, the user will be prompted if stdin is.

     a tty, otherwise, the output file will not be overwritten.

    其中提到了压缩空间的问题。我猜测可能是压缩效率的问题。

    于是用compress -f 的方式,果然压缩成功了。比较压缩前和压缩后的大小,结果发现压缩后的文件还比压缩前的文件要大。难怪,所以-f提高了即使没有压缩空间。

    这倒是挺有意思,一来压缩一个文件,大小不减反增,比较少见。二来compress指令还去做比较?

    于是下载了compress 4.2的源代码,大致看了一下,果然有这么一个判断:

以下是代码片段:
    if (bytes_out >= bytes_in && !(force)) 
                    exit_code = 2;

    bytes_out是压缩后的字节,bytes_in是读入的字节,也就是原始文件的大小。force对应的是-f的参数。

    没有想到,这开发人员还这么考虑呀。

建议继续学习

  1. vim几个小技巧(批量替换,列编辑) (阅读 37,263)
  2. ps - 按进程消耗内存多少排序 (阅读 12,524)
  3. find命令的一点注意事项 (阅读 11,683)
  4. 100个常用的linux命令 (阅读 11,444)
  5. 每个程序员都应该知道的8个Linux命令 (阅读 10,586)
  6. 最受欢迎的10个 Linux 单行命令 (阅读 10,002)
  7. Linux date 命令获取某日期的前一天 (阅读 9,725)
  8. ps 命令常见用法 (阅读 9,323)
  9. Linux常用系统信息查看命令 (阅读 8,503)
  10. Linux 常见高危操作 (阅读 8,263)