2011-05-27 115 views

回答

4

您不能直接獲取未壓縮文件的大小,但可以使用查找。從文件創建一個對象並嘗試尋找第一個字節。如果您可以查找,那麼您的文件至少有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"; 
} 
+0

這是最好的方法。我沒有想到使用Fcntl並進行尋找。 – 2011-05-31 16:30:36

0

要檢查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 
+1

混合perl和shell通常是一個壞主意,因爲結果文件很難讀取。 – jeremiah 2013-01-01 14:01:38

2

你可以使用IO::Compress::Gzip附帶的Perl 5.10和ABO (或通過CPAN下載)。並用它來讀取文件。

但是,您只需在文件上執行stat並查看它是否僅包含26個字節,因爲空文件僅包含26個字節的標頭。

我想這只是取決於你正在嘗試做什麼。你只是試圖確定一個gzip文件是否爲空,或者你打算先閱讀並解壓縮它?如果是前者,stat將是最容易的。如果是後者,請使用IO::Compress::Gzip模塊,而不是使用一堆system命令來調用gzipIO::Compress::Gzip附帶5.10及更高版本的所有Perl發行版,所以它是處理Zip的默認方式。

+0

您無法檢查文件大小並將其與「26」進行比較。壓縮文件的文件大小取決於文件名。 – 2011-05-27 15:02:27

+0

是的,它不完全是26個字節,但是如果它在25到40個字節之間,它肯定是空的。 – 2011-05-27 15:08:19

+0

壓縮之前的完整文件名位於標題中。如果你使用gzip長文件名,它會和文件名+頭一樣大。如果您的文件名超過40個字節,它可以輕鬆超過40個字節。 – 2011-05-27 15:22:29

相關問題