当前位置: 首页 > news >正文

#免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程

Mac电脑苹果芯片读写NTFS硬盘bash脚本

(ntfs.sh脚本内容在本文最后面)

ntfs.sh脚本可以将Mac系统(苹果M系芯片)上的NTFS硬盘改成可读写的挂载方式,从而可以直接往NTFS硬盘写入数据。此脚本免费,使用过程中无需下载任何收费软件。 每次插入NTFS硬盘之后,都需要执行此脚本,才可以往硬盘中写入数据。

[最终实现效果]

初次运行准备工作

  • 将电脑的安全策略设置为“降低安全性”,并允许用户管理来自被认可开发者的内核扩展。

    • 首先将电脑关机。

    • 按住触控ID或电源按钮,至少10秒,直到出现正在载入启动选项(适用Apple芯片)。

    • 点按选项-继续-(左上角)实用工具-启用安全性实用工具-安全策略。

    • 选择降低安全性,勾选允许用户管理来自被认可开发者的内核扩展,点击好。

    • 设置成功之后,点击屏幕左上角的苹果标志重启电脑,重启即可

    • 具体步骤可参考:https://support.apple.com/guide/mac-help/mchl768f7291/mac

  • 初次运行此脚本前,需要运行以下指令授权此脚本(假设此脚本名称是ntfs.sh):

chmod +x ntfs.sh

如何使用脚本

  • 首先必须插入硬盘。

  • 打开(cd)脚本所在目录,执行脚本:

./ntfs.sh
  • NTFS重新挂载成功之后,会自动打开Finder所在目录。

参考资料

  • 在搭载 Apple 芯片的 Mac 上更改启动磁盘的安全性设置

  • mac 系统 安装macfuse 支持NTFS写入

  • Homebrew

  • osxfuse/osxfuse/NTFS 3G

许可证

GNU Lesser General Public License v3.0

脚本内容ntfs.sh

请把脚本代码复制下来,以.sh脚本后缀保存到电脑上,在终端执行此脚本。

#!/bin/bash
# charset=utf-8
# @author: aqvdrt
# @date: 20240206
# 功能:在搭载Apple芯片的Mac上,取消NTFS硬盘默认的只读挂载方式,改成可读写的挂载方式。
# 
# 【重要】执行此脚本的前置条件:
#   1.将安全策略设置为“降低安全性”,并允许用户管理来自被认可开发者的内核扩展。具体步骤参考:https://support.apple.com/guide/mac-help/mchl768f7291/mac
#       - 按住触控ID或电源按钮,至少10秒,直到出现“正在载入启动选项”(适用Apple芯片)。
#       - 点按“选项”-“继续”-(左上角)“实用工具”-“启用安全性实用工具”-“安全策略”。
#       - 选择[降低安全性],勾选“允许用户管理来自被认可开发者的内核扩展”,点击[好]。
#       - 设置成功之后,点击屏幕左上角的苹果标志重启电脑,重启即可
#   2.初次运行此脚本前,需要运行以下指令授权此脚本(假设此脚本名称是ntfs.sh):`chmod +x ntfs.sh`
#   3.必须要先插入硬盘再执行此脚本.
# 
# 其他说明:
#   - 该功能需要借助第三方软件,此脚本会自动检查或安装这些软件:homebrew,macfuse,ntfs-3g-mac。
#   - (可选)如果在中国brew安装速度太慢,可以尝试修改brew镜像源:https://ken.io/note/macos-homebrew-install-and-configuration# =============以下是需要执行的指令================# 第一步:检查是否有只读的NTFS硬盘
if mount | grep ntfs | grep read-only
thenecho " "
elseecho "---当前不存在只读方式的NTFS硬盘.---"echo "---No read-only NTFS hard drive found.---"mount | grep -E 'ntfs|macfuse'exit
fi# 第二步:确保所需环境已经安装
echo "[重要] 请确保安全策略已设置为“降低安全性”,并允许用户管理来自被认可开发者的内核扩展。"
echo "[IMPORTANT] Make sure the security options is set to 'Reduced Security', and allow user management of kernel extensions from identified developers"
echo "[重要] 要先将硬盘插入到电脑且识别成功,才可以重新挂载成功。"
echo "[IMPORTANT] The hard drive must be connected to the computer and recognized successfully before it can be remounted successfully."
# 关闭系统的Gatekeeper安全功能,才能运行从非官方来源(如App Store和已知开发者)安装的应用程序
sudo spctl --master-disable 
# 检查homebrew,如果不存在就安装
if ! command -v brew &> /dev/null
thenecho "[Homebrew]尚未安装,即将开始自动安装。官网:https://brew.sh/"echo "[Homebrew] is not installed. It'll start installing soon. website: https://brew.sh/"# 使用官网的脚本自动安装homebrew/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# 全局配置brew使其生效echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"
elseecho "[Homebrew]已经安装。"echo "[Homebrew] is installed"
fi# 检查 brew 中是否已安装 "macfuse"
if grep -q "macfuse" <<< "$(brew list)"
thenecho "[macfuse]已安装"echo "[macfuse] is installed"
elseecho "[macfuse]尚未安装,即将开始自动安装"echo "[macfuse] is not installed. It'll start installing soon."brew install --cask macfuse
fi# 检查 brew 中是否已安装 "ntfs-3g-mac"
if grep -q "ntfs-3g-mac" <<< "$(brew list)"
thenecho "[ntfs-3g-mac]已安装"echo "[ntfs-3g-mac] is installed"
elseecho "[ntfs-3g-mac]尚未安装,即将开始自动安装"echo "[ntfs-3g-mac] is not installed. It'll start installing soon."brew tap gromgit/homebrew-fusebrew install ntfs-3g-mac
fi# 第三步:开始重新挂载硬盘
echo "============读写NTFS的环境已准备好============"
echo "============It's ready to change NTFS mount method============"
echo "开始重新挂载NTFS硬盘,将只读硬盘改成读写方式,成功之后会自动打开finder"
echo "Starting to change NTFS to read-write mode. Finder will be opened once succeed."
mount | grep ntfs | grep read-only | while read -r line;
do# line: /dev/disk4s1 on /Volumes/EXTERNAL_USB (ntfs, local, nodev, nosuid, read-only, noowners, noatime, nobrowse)((index++))echo "【第${index}个NTFS设备】------------------:"echo "【${index}-NTFS device】------------------:"echo "原始挂载方式:"${line}echo "Original mount:"${line}# 提取设备真实地址device_path=`echo $line | awk '{print$1}'`echo "设备真实地址:"${device_path}echo "Device real path:"${device_path}# 提取设备挂载地址mount_path=`echo $line | awk '{print$3}'`echo "设备挂载地址:"${mount_path}echo "Device mount path:"${mount_path}# 提取设备挂载的根目录mount_dir=`dirname $mount_path`# 提取设备挂载名称mount_name=`basename $mount_path`echo "设备挂载名称:"${mount_name}echo "Device mount name:"${mount_name}# 取消原有的硬盘挂载方式sudo umount $device_path# 以可读写方式重新挂载硬盘sudo -S $(which mount_ntfs) ${device_path} ${mount_path} # 此命令可以成功修改硬盘文件内容# sudo -S $(which ntfs-3g) ${device_path} ${mount_path} -o local -o allow_other -o auto_xattr -o volname=${mount_name} # 此命令无法成功修改硬盘文件内容echo "新设备[${mount_name}]已可读写!"echo "即将自动打开finder (${mount_path})..."echo "Hard drive [${mount_name}] is allowed to write and read!"echo "Opening finder (${mount_path})..."# 打开硬盘所挂载的根目录open ${mount_dir}echo '----------------------------------'echo " "
done 

相关文章:

  • Simulink模块说明
  • 云计算基础-网络虚拟化
  • 备战蓝桥杯---图论之最短路dijkstra算法
  • Spring-面试题
  • Linux 目录结构结构
  • 循序渐进-讲解Markdown进阶(Mermaid绘图)-附使用案例
  • docker (五)-docker存储-数据持久化
  • 2月8号作业
  • python---变量
  • docker (四)-docker网络
  • 转换成小写字母
  • 数据检索:倒排索引加速、top-k和k最邻近
  • PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证
  • PXE实现自动批量安装部署操作系统
  • HarmonyOS 横屏调试与真机横屏运行
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • hadoop集群管理系统搭建规划说明
  • HTTP那些事
  • js面向对象
  • Linux快速复制或删除大量小文件
  • PAT A1092
  • SegmentFault 2015 Top Rank
  • 初识 webpack
  • 关于Flux,Vuex,Redux的思考
  • 如何合理的规划jvm性能调优
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 我从编程教室毕业
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 白色的风信子
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #pragma pack(1)
  • #stm32整理(一)flash读写
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (k8s中)docker netty OOM问题记录
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)springcloud实战之config配置中心
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (蓝桥杯每日一题)love
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)终结任务
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .dwp和.webpart的区别
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • @requestBody写与不写的情况
  • @vue/cli 3.x+引入jQuery
  • [\u4e00-\u9fa5] //匹配中文字符
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)