这个问题在这里已有答案:
- 如何将多个文件压缩成单独的档案? 1个答案
我有一个目录, /dir,它充满了没有通用命名方案的其他目录。所以 /dir/EqcWTG /dir/SomeDirectoryName /dir/3435346 等等。
我想将这些目录中的每一个转换为zip文件。所以基本上我想跑 $ zip -r directoryname.zip directoryname 在每个目录中 $(pwd)。
最简单的方法是什么?
这个问题在这里已有答案:
我有一个目录, /dir,它充满了没有通用命名方案的其他目录。所以 /dir/EqcWTG /dir/SomeDirectoryName /dir/3435346 等等。
我想将这些目录中的每一个转换为zip文件。所以基本上我想跑 $ zip -r directoryname.zip directoryname 在每个目录中 $(pwd)。
最简单的方法是什么?
Answers:
运用 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 {} \;
现在,这些将创建将扩展到完整的ZIP存档 /dir 路径; /dir/EqcWTG, /dir/SomeDirectoryName, /dir/3435346等等...如果您想要独立/相对ZIP档案,您可以使用 -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, SomeDirectoryName, 3435346等等......但是,您选择的最终用法/选项都取决于您最终的ZIP存档需求。
-mindepth 1 作为另一种避免ZIP压缩父目录的潜在方法。
$ find * -maxdepth 1 -type d -exec zip -r {}.zip {} \; 完全按照我想要的方式完成,我在测试目录以及我最初发布此问题的实时目录中使用了它。
/dir通过使用-mindepth 1,如果其中一个子目录与父目录具有相同的名称。