用于压缩具有特定名称的所有子文件夹的 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 命令或脚本的主要内容,如果未能解决你的问题,请参考以下文章
如何将文件递归复制到具有特定名称的所有文件夹中(首选批处理文件)