Поскольку вы используете $File::Find::name
для своего списка, вы получаете абсолютный путь к каждому файлу. Это имя, которое вы даете Archive::Tar
, так что это имя, которое он использует. Вы можете увидеть файлы в архиве:
$ tar -tzf archive.tgz
Вместо этого существуют различные способы получения относительных путей. Вы можете сделать это в нужной функции. Удалите ту часть пути, которая вам не нужна. Обычно это не тот каталог, который вы использовали для find
(src_location
), потому что вы хотите сохранить этот уровень структуры:
my @inventory;
find(
sub {
return if /\A\.\.?\z/;
push @inventory, abs2rel( $File::Find::name, $home_dir )
}, $src_location
);
Или сделайте это после:
@inventory = map { abs2rel($_, $home_dir) } @inventory;