用于压缩具有特定名称的所有子文件夹的 Mac OS X 命令或脚本

Posted

技术标签:

【中文标题】用于压缩具有特定名称的所有子文件夹的 Mac OS X 命令或脚本【英文标题】:Mac OS X command or script to zip all subfolders with a particular name 【发布时间】:2013-10-16 03:10:45 【问题描述】:

我有一个文件夹,其中包含许多文件和多个级别的子文件夹。我正在寻找可以压缩任何名为“fonts”的子文件夹的命令或脚本,从而生成与字体文件夹处于同一级别的 fonts.zip 文件。

字体文件夹应在创建 zip 文件后保留(不删除)。

如果另一个字体文件夹中存在字体文件夹(不太可能),则只有***字体文件夹会生成 fonts.zip 文件(理想情况,但不是强制性的)。

如果与fonts文件夹同级已经有fonts.zip文件,应该替换掉。

我承认,我是 Mac 新手。希望可以有一个简单的终端命令来完成此操作。但我对如何实现这一点的其他想法持开放态度。

谢谢, -马特

【问题讨论】:

zip 程序有很多选项(参见man zip),但本质上您使用zip -r fonts.zip fonts 递归压缩目录,并使用find . -type d -name 'fonts' -exec zip -r fonts.zip + 在树中查找所有此类源目录(其中. 表示搜索从终端中的任何目录开始)。但是,如果fonts 在树中出现不止一次,我不知道“停止”的好方法。 感谢@Kevin 的回复。我尝试了find . -type d -name 'fonts' -exec zip -r fonts.zip + 命令,结果是起始目录中有一个fonts.zip 文件。是否可以修改为生成多个 fonts.zip 文件,每个文件与其对应的 fonts 文件夹处于同一级别? 【参考方案1】:

以 Kevin Grant 的建议为起点,我能够按照我需要的方式组合一个终端命令:

find . -type d -iname '*fonts' -execdir ditto -c -k -X --rsrc fonts.zip \;

我参考了 find 和 ditto 命令及其开关的手册页。我选择使用 ditto 而不是 zip,因为它应该与 Mac OS X 下的 HFS 和资源分支更兼容。接下来我将了解 StuffIt 是否有命令行工具。如果是这样,我将使用它而不是同上。

This was also helpful.

【讨论】:

以上是关于用于压缩具有特定名称的所有子文件夹的 Mac OS X 命令或脚本的主要内容,如果未能解决你的问题,请参考以下文章

jar文件可以在Mac OS上运行吗?

XPath 获取除具有特定名称的子元素之外的所有子元素?

如何将文件递归复制到具有特定名称的所有文件夹中(首选批处理文件)

将具有特定(相同)名称的子文件夹复制到目标

NSPredicate 用于获取具有特定课程名称的所有学生?

使用 osx 终端从外部硬盘驱动器中提取具有特定名称的子文件夹。