这个问题在这里已有答案:
- 如何将多个文件压缩成单独的档案? 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
,如果其中一个子目录与父目录具有相同的名称。