如何在文件夹中搜索所有 zip 文件,将其解压缩,然后通过 7-zip 将根文件夹压缩为 1 个大 zip 文件?

如何在文件夹中搜索所有 zip 文件,将其解压缩,然后通过 7-zip 将根文件夹压缩为 1 个大 zip 文件?

我有一个问题。我需要压缩一个根文件夹,但其子文件夹中有很多 ZIP/BZIP/TAR 文件。有人可以向我展示一个脚本,该脚本将搜索并解压缩每个子文件夹的 zip 文件,然后以最大压缩率对根文件夹进行 7-zip 压缩吗?

答案1

需要注意的是,7z它不存储文件的所有者/组等,因此不能正确尊重权限。它不太适合在 Unix 上备份,因此我tar.7z在下面的脚本中使用了它,它仍然可以提供良好的压缩效果。如果您确实想要,您可以只指定.7z,但您将丢失权限数据。

您需要atool从存储库安装,因为我使用它来简化各种格式的提取。您还需要p7zip

sudo apt-get install atool p7zip

只需在文本编辑器中输入以下脚本,保存并使其可执行即可。然后在所需文件夹中执行它即可(但请参阅下面的重要说明以了解其工作原理)。

(此脚本中的 find 命令行来自这个问题

#!/bin/bash

find -mindepth 2 -type f -print -exec mv {} . \;
mkdir my_files
aunpack -e * -X my_files/
apack -O-mx=9 imp_files.tar.7z my_files/
mv imp_files.tar.7z /home/$USER/
exit 0

重要笔记:

  • 所需子文件夹中的文件将被传送到执行脚本的目录中,除非您想将该行添加 cd /home/$USER/"$1"到脚本顶部并将其放在您的目录中~/bin,然后用 调用它script_name desired_folder

  • 找到文件后将其移动到 pwd(当前工作目录),然后创建一个新目录,并将它们全部提取到该目录中。我使用了atools 包中的aunpack和 ,apack因为它们可以同时处理多种存档类型。请参阅我的答案在这里了解更多信息;aunpack非常棒,因为它允许您提取所有类型的存档文件,而无需单独执行tar7z等。

  • 将文件解压到指定文件夹后,该文件夹将打包为 tar 文件,然后打包为最大压缩率的 7zip 文件 ( mx=9)。最后,将生成的文件移动到主文件夹的底部。

在脚本中,我没有删除从子目录中获取的文件;您可以根据需要添加它,并根据您的需要定制脚本,但我希望这对于学习基本脚本有用。

答案2

尝试写自己的,很有趣!:-)

以下是一些想法和起点:

  • 在进行任何实验之前,请复制初始数据!(说真的,你在某些时候会需要备份)
  • 创建一个名为 的新脚本recompress.sh
  • 使用 使其可执行chmod +x recompress.sh
  • 您可以使用 find 获取需要处理的所有文件的列表。这是递归工作的。请参阅Stackoverflow 答案详情。
  • 您必须使用 单独处理 zip 文件,unzip <fileanme>使用 处理所有 tar 文件tar xvf <filename>。Tar 会自动检测存档类型。因此,请制作两个单独的find /folder -name ...循环。或者找到一个可以处理所有存档类型的工具 :-)
  • 删除所有解压的档案(记得您已经备份了吗?)
  • 使用 压缩所有内容p7zip。或者,如果您想自定义压缩级别和其他内容,请7zr直接使用。

编辑:实际上,如果您逐步构建命令并检查每个命令的错误/输出,可能会容易得多。

答案3

您可以编写脚本或使用 Nautilus 搜索轻松完成此操作。

  • 只需搜索.zip→ 突出显示所有 zip 文件并选择 →‘在此处提取’
  • (可选)删除所有 *.zip 文件
  • 对其他文件格式重复此步骤

完成后压缩根文件夹。
快速而肮脏:)

附言:我喜欢终端,但有时 GUI 更快。
PPS:用于tar.xz压缩根文件夹。

相关内容