如何通过macOS终端挂载SMB文件夹并批量执行文件拷贝与安装操作?
如何通过macOS终端挂载SMB文件夹并批量执行文件拷贝与安装操作?
我来帮你梳理下问题所在,一步步搞定这个批量部署Adobe包的需求~
首先看你挂载命令的两个关键错误:
- 挂载点路径少了根目录的
/:你写的usr/local/Installers是相对路径,终端会从当前目录找这个路径,而正确的绝对路径应该是/usr/local/Installers,这是导致“找不到文件或目录”的核心原因之一。 - SMB URL格式错误:你用分号分隔服务器和用户名的写法不对,标准的SMB URL格式是
smb://[用户名:密码@]服务器地址/共享路径。如果是域用户,需要把域名和用户名用反斜杠分隔(终端里要转义成两个\\)。
修正后的挂载命令示例
假设你的用户名是corp-admin,密码是yourPass123,域名为COMPANY,服务器地址是servername.domain.int,共享路径是Software/APPLEDMG,那么正确的挂载命令应该是:
# 域用户版本 mount_smbfs smb://COMPANY\\corp-admin:yourPass123@servername.domain.int/Software/APPLEDMG /usr/local/Installers # 非域用户版本 mount_smbfs smb://corp-admin:yourPass123@servername.domain.int/Software/APPLEDMG /usr/local/Installers
完整批量部署脚本流程
按照你需要的操作顺序,我整理了一套完整的脚本逻辑,适合批量推送给100台Mac:
- 创建挂载点(确保存在)
# 用-p参数自动创建父目录,避免报错 sudo mkdir -p /usr/local/Installers # 设置合适的权限,避免挂载时权限不足 sudo chmod 755 /usr/local/Installers
- 挂载SMB共享
# 把配置项放在变量里,方便批量修改 SMB_USER="corp-admin" SMB_PASS="yourPass123" SMB_SERVER="servername.domain.int" SMB_SHARE="Software/APPLEDMG" MOUNT_POINT="/usr/local/Installers" # 执行挂载 mount_smbfs smb://${SMB_USER}:${SMB_PASS}@${SMB_SERVER}/${SMB_SHARE} ${MOUNT_POINT}
注意:如果密码包含特殊字符(比如
!@#$),需要用URL编码替换(例如!换成%21),或者提前把密码存入Mac钥匙串,用security find-generic-password -s "你的服务器名" -w读取,避免明文泄露。
- 拷贝安装包到本地
# 把共享里的Adobe包拷贝到本地/Users/Shared目录(权限更友好,适合静默安装) sudo cp -R ${MOUNT_POINT}/Adobe_CC_Package.pkg /Users/Shared/ # 如果是.app格式的包,同样用-R递归拷贝 # sudo cp -R ${MOUNT_POINT}/Adobe_CC_Installer.app /Users/Shared/
- 静默安装包
# 用installer命令静默安装,-target /表示安装到系统盘 sudo installer -pkg /Users/Shared/Adobe_CC_Package.pkg -target /
- 卸载共享并清理
# 卸载SMB挂载点 umount ${MOUNT_POINT} # 可选:如果以后不需要这个挂载点,可以删除 # sudo rmdir ${MOUNT_POINT} # 删除本地的安装包,释放空间 sudo rm /Users/Shared/Adobe_CC_Package.pkg
额外提醒
- 因为你是用本地管理员账号执行,确保sudo命令不需要交互式输入密码(可以提前配置sudoers文件,或者通过JAMF推送带权限的脚本)。
- 批量执行前,先在单台Mac上测试脚本,确认挂载、拷贝、安装全流程正常,避免批量出问题。
备注:内容来源于stack exchange,提问作者Tried_to_be_a_Coder




