如何比较tar存档和目录中的文件列表?

Spa*_*ace 1 perl gzip gunzip

我还在学习Perl.任何人都可以建议我使用Perl代码比较.tar.gz文件和目录路径.

假设我有tar.gz备份以下目录路径,这是我几天前回来的.

a/file1
a/file2
a/file3
a/b/file4
a/b/file5
a/c/file5
a/b/d/file and so on..
Run Code Online (Sandbox Code Playgroud)

现在我想将此路径下的文件和目录与tar.gz备份文件进行比较.

请建议使用Perl代码.

FMc*_*FMc 5

Archive::TarFile::Find模块将是有益的.一个基本的例子如下所示.它只打印有关tar中文件的信息和目录树中的文件.

从您的问题中不清楚您要如何比较文件.如果您需要比较实际内容,可能需要使用该get_content()方法Archive::Tar::File.如果更简单的比较(例如,名称,大小和mtime),您将不需要比下面示例中使用的方法更多.

#!/usr/bin/perl
use strict;
use warnings;

# A utility function to display our results.
sub Print_file_info {
    print map("$_\n", @_), "\n";
}

# Print some basic information about files in a tar.
use Archive::Tar qw();
my $tar_file = 'some_tar_file.tar.gz';
my $tar = Archive::Tar->new($tar_file);
for my $ft ( $tar->get_files ){
    # The variable $ft is an Archive::Tar::File object.
    Print_file_info(
        $ft->name,
        $ft->is_file ? 'file' : 'other',
        $ft->size,
        $ft->mtime,
    );
}

# Print some basic information about files in a directory tree.
use File::Find;
my $dir_name = 'some_directory';
my @files;
find(sub {push @files, $File::Find::name}, $dir_name);
Print_file_info(
    $_,
    -f $_ ? 'file' : 'other',
    -s,
    (stat)[9],
) for @files;
Run Code Online (Sandbox Code Playgroud)