Как найти файл gzip пустой сжатый файл - PullRequest
2 голосов
/ 27 мая 2011

Как найти файл gzip пустым, используя perl

a.txt.gz, когда я распаковываю его пустое

как найти компресс gz пустые?

Ответы [ 3 ]

4 голосов
/ 27 мая 2011

Вы не можете напрямую получить размер несжатого файла, но вы можете использовать поиск для него.Создайте объект из файла и попытайтесь найти первый байт.Если вы можете искать, то ваш файл имеет размер не менее 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";
}
2 голосов
/ 27 мая 2011

Вы можете использовать IO :: Compress :: Gzip , который поставляется с Perl 5.10 и выше (или загрузить его через CPAN ).И используйте его для чтения файла.

Однако вы можете просто сделать stat для файла и просто посмотреть, содержит ли он только 26 байтов, так как пустой файл будет состоять всего из 26заголовок байта.

Я думаю, это просто зависит от того, что вы пытаетесь сделать.Вы просто пытаетесь определить, является ли файл gzip пустым, или вы планировали прочитать его и сначала распаковать?Если это первый, stat будет самым простым.Если это последнее, используйте модуль IO::Compress::Gzip, а не набор system команд для вызова gzip.IO::Compress::Gzip поставляется со всеми дистрибутивами Perl 5.10 и выше, поэтому это стандартный способ обработки Zip.

0 голосов
/ 27 мая 2011

Чтобы проверить содержимое сжатого 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...