我还在学习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代码.
在Archive::Tar和File::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)