回答
您不能直接获取未压缩文件的大小,但可以使用查找。从文件创建一个对象并尝试寻找第一个字节。如果您可以查找,那么您的文件至少有1个字节的大小,否则它是空的。
#!/usr/bin/env perl
use strict;
use warnings;
use IO::Uncompress::Gunzip;
use Fcntl qw(:seek);
my $u = IO::Uncompress::Gunzip->new('readme.gz');
if ($u->seek(1, SEEK_CUR)) {
print "Can seek, file greather than zero\n";
}
else {
print "Cannot seek, file is zero\n";
}
要检查tar压缩文件的内容,请使用
tar -ztvf file.tgz
要列出的.gz文件的内容,请使用
gzip --list file.gz
裹在Perl和检查uncompressed
场在输出
$ gzip --list fjant.gz
compressed uncompressed ratio uncompressed_name
26 0 0.0% fjant
混合perl和shell通常是一个坏主意,因为结果文件很难读取。 – jeremiah 2013-01-01 14:01:38
你可以使用IO::Compress::Gzip附带的Perl 5.10和ABO (或通过CPAN下载)。并用它来读取文件。
但是,您只需在文件上执行stat并查看它是否仅包含26个字节,因为空文件仅包含26个字节的标头。
我想这只是取决于你正在尝试做什么。你只是试图确定一个gzip文件是否为空,或者你打算先阅读并解压缩它?如果是前者,stat
将是最容易的。如果是后者,请使用IO::Compress::Gzip
模块,而不是使用一堆system
命令来调用gzip
。 IO::Compress::Gzip
附带5.10及更高版本的所有Perl发行版,所以它是处理Zip的默认方式。
您无法检查文件大小并将其与“26”进行比较。压缩文件的文件大小取决于文件名。 – 2011-05-27 15:02:27
是的,它不完全是26个字节,但是如果它在25到40个字节之间,它肯定是空的。 – 2011-05-27 15:08:19
压缩之前的完整文件名位于标题中。如果你使用gzip长文件名,它会和文件名+头一样大。如果您的文件名超过40个字节,它可以轻松超过40个字节。 – 2011-05-27 15:22:29
- 1. 如何压缩GZip格式的文件?
- 2. 与django_compressor压缩文件以gzip压缩
- 3. Hadoop gzip压缩文件
- 4. node.js如何流化22GB gzip压缩文件解压缩
- 5. 如果gzip文件是通过组合多个gzip文件创建的,Chrome不会解压缩gzip文件
- 6. 如何解压gzip文件
- 7. Apache:无法找到htaccess文件来启用gzip压缩
- 8. C#解压.GZIP到文件
- 9. 如何检查文件是否被gzip压缩?
- 10. 如何判断文件是否被gzip压缩?
- 11. 在.htaccess文件中启用gzip压缩
- 12. 在JavaScript文件上强制GZIP压缩
- 13. Appengine提供gzip压缩文件
- 14. 异步解压缩gzip文件
- 15. NIO GZIP压缩和复制文件
- 16. 与gzhandler PHP为4KB文件gzip压缩
- 17. 如何将Hadoop目录压缩到单个gzip文件?
- 18. 用GZip,Deflate压缩javascript文件的最佳组件是什么?
- 19. 由gzip压缩的小文件比大文件大?
- 20. 从PCL压缩gzip/zip文件的文件夹
- 21. 空气解压缩文件
- 22. 如何使用Gzip(Deflate)创建高度压缩的文件?
- 23. 如何下载,解压缩和处理OCaml中的gzip文件?
- 24. 我如何解压缩自定义管道中的gzip文件
- 25. 压缩和解压缩与每个“压缩,gzip,bzip2和zip”文件
- 26. 如何在.htaccess文件中禁用某些媒体文件的Apache gzip压缩?
- 27. 如何使用Ant和Gzip压缩文件夹中的每个文件
- 28. 如何使用GZipStream类压缩GZip文件中的多个文件?
- 29. 如何直接将csv文件压缩成zip压缩文件?
- 30. 如何将未压缩文件夹视为压缩文件?
这是最好的方法。我没有想到使用Fcntl并进行寻找。 – 2011-05-31 16:30:36