在 Linux 中,一次递归压缩多个目录的最佳方法是什么?

在 Linux 中,一次递归压缩多个目录的最佳方法是什么?

我有一个目录,/dir里面充满了没有通用命名方案的其他目录。等等/dir/EqcWTG /dir/SomeDirectoryName /dir/3435346

我想将每个目录都转换为 zip 文件。因此,基本上我想$ zip -r directoryname.zip directoryname在每个目录上运行$(pwd)

实现这一目标最简单的方法是什么?

答案1

使用find这应该有效:

find /dir -not -name "dir" -maxdepth 1 -type d -exec zip -r '{}.zip' '{}' \;

请注意,我将 用/dir作主find路径,但同时将 用作-not -name "dir"父目录,以便不存档。接下来,我们使用 来限制扫描深度,find-maxdepth 1意味着find将仅搜索路径的直接子路径/dir。之后,我们确保仅对带有 的目录进行操作-type d。最后,我们使用-exec来运行神奇的zip命令,该命令将以递归方式压缩它找到的所有目录;{}仅相当于目录名称本身。

另一种策略是使用-mindepth 1而不是-not -name "dir",以防父结构中的嵌套目录/dir以某种方式也使用名称/dir或将“dir”作为其名称的一部分:

find /dir -mindepth 1 -maxdepth 1 -type d -execdir echo {} \;

现在,这些将创建扩展为完整/dir路径的 ZIP 档案;/dir/EqcWTG,,,等等...如果您想要独立/相对 ZIP 档案,您可以使用/dir/SomeDirectoryName而不是像这样:/dir/3435346-execdir-exec

find /dir -not -name "dir" -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;

相同的-execdir想法,但是用-mindepth 1代替-not -name "dir"

find /dir -mindepth 1  -maxdepth 1 -type d -execdir zip -r '{}.zip' '{}' \;

由于-execdir强制find命令在它找到某些内容的实际目录中执行操作(而不是完整路径),该命令将创建类似命名的 ZIP 存档,这些存档将扩展到名为、、EqcWTG等的相对目录…但同样,您选择的最终用途/选项都取决于您最终的 ZIP 存档需求。SomeDirectoryName3435346

相关内容