在 OS X 命令行上删除多个 ZIP 存档内的文件

在 OS X 命令行上删除多个 ZIP 存档内的文件

我正在尝试从多个 zip 档案中删除具有特定扩展名的文件。

例如,我想删除当前路径中的 zip 档案中包含的所有 .html 文件,因此我尝试这样做: zip -d *.zip '*.html'

这对找到的第一个 zip 有效,但不会继续。关于如何在 OSX 上执行此操作,有什么建议吗?

答案1

问题是,*.zip在传递给zip命令之前,它会扩展到所有 ZIP 文件。

使用一个简单的循环来做到这一点:

for f in *.zip; do zip -d "$f" '*.html'; done

如果你有 Zsh,这种循环会更短一些:

for f (*.zip) zip -d "$f" '*.html'

如果您想要使用标准 OS X 工具递归到子文件夹,请使用find

find /path/to/files -type f -name '*.zip' -exec zip -d {} '*.html' \;

相关内容