我可以命令 7z 在使用子目录压缩目录时跳过特定文件的压缩(但不包含)吗?

我可以命令 7z 在使用子目录压缩目录时跳过特定文件的压缩(但不包含)吗?

我非常喜欢 WinRAR(适用于 Windows)存档器的一个功能:它可以设置为跳过尝试压缩特定文件(基于其扩展名(名称模式)),同时将它们包含到压缩存档中。当谈到备份用户主目录时,它可以节省大量时间,放弃尝试压缩 mp3、jpg、zip 等文件,而只需将它们添加到压缩文本、xls、数据库时不受影响的(非固体)存档中等文件正在添加。

切换到 Linux 后,出于我自己的方便原因(tar.gz 倡导者使用说需要保存权利/所有权信息和链接,但我不在我的非系统文件中使用任何内容)。

但我非常怀念 WinRAR 跳过特定文件压缩的​​功能。也许你也是7z的粉丝,也许你知道如何实现这个效果?

答案1

通常这是使用完成的tar,但如果您确实想跳过压缩,请将压缩级别设置为 0。

由于我没有 GUI 并且实际上我不使用它,因此您可能必须编写一个脚本来执行您需要的操作,例如我使用 PERL,但您可以以任何您选择的方式执行此操作。这个特定的文件将跳过这些jpg文件。

my $archive = "/home/user/archive.zip";
for $file @filenames
{
    my $compression_level = 9;
    $compression_level = 0 if($file =~ /jpg$/);
    `7za a -tzip -mx=$compression_level $archive $file`;
}

您可能可以根据需要使用脚本来变得复杂,但这取决于您。

答案2

我只是在寻找同样的问题,我意识到这是一个老问题,但我想我已经找到了一种方法。

将文件单独添加到(即更新)存档。

例如,首先我们添加所有具有最佳压缩的文本文件:

7z a archive.7z "*/*.txt" -mx9

然后更新所有不压缩的 mp3 文件:

7z u archive.7z "*/*.mp3" -m0=copy

相关内容