我有一个目录,/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 存档需求。SomeDirectoryName
3435346