使用hdiutil

时间:2015-07-29 06:26:01

标签: macos command mount

我正在安装一些带有shell模块的应用程序。我想编写不同版本的通用脚本。

- name: Installing Sublime Text
  shell: "{{ item }}"
  with_items:
  - hdiutil mount "{{download_location}}/sublime.dmg"
  - cp -R /Volumes/Sublime\ Text\ 2/Sublime\ Text\ 2.app "{{applications_location}}/Sublime Text.app"
  - hdiutil unmount /Volumes/Sublime\ Text\ 2

现在我正在使用attach / mount,但问题是当我安装多个版本时,每个版本都有自己的不同名称的文件夹结构,我必须单独创建脚本来复制它。

hdiutil mount --name common
cp -R /Volumes/common/myapp.app destination

如果我得到常见的文件夹名称,我可以将common / * app复制到目的地。 如何安装具有特定名称的dmg文件?

1 个答案:

答案 0 :(得分:1)

hdiutil attach / mount

这是一种非常简单的附加/安装.dmg的方式,我能够提出:

var=$(ls | egrep -m1 ".*Sub.*dmg"); yes y | hdiutil attach $var

该命令尝试在名称.dmg中找到并装入包含“Sub”的任何内容。如果出现,则yes y使用{1}}接受协议通知。如果你认为你不会遇到类似的东西,你可以随时删除它。

cp到目的地:

cp -R /Volumes/*Sub*/*.app ~/Path/To/Destination

下一个命令搜索包含单词“Sub”作为卷名的任何已装入或已附加的卷;然后将.app复制到目标。如果您有多个.dmg文件要挂载/附加并将文件复制到目标,则可以使用递归find

recursive hdiutil / mount + cp

yes y | find . -regex ".*Sub.*dmg" -exec hdiutil attach {} \;
find /Volumes/*Sub*/* -regex ".*\.app" -exec cp -R {} ~/Path/To/Destination \;

这应该找到包含“Sub”的任何 .dmgs,将它们 all 挂载并将.app从每个卷复制到目标。 谨慎使用 - 它会在没有警告的情况下复制目的地中同名文件。