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

news2024/11/14 13:53:18

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
then
    echo " "
else
    echo "---当前不存在只读方式的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
then
    echo "[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)"' >> ~/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"
else
    echo "[Homebrew]已经安装。"
    echo "[Homebrew] is installed"
fi

# 检查 brew 中是否已安装 "macfuse"
if grep -q "macfuse" <<< "$(brew list)"
then
    echo "[macfuse]已安装"
    echo "[macfuse] is installed"
else
    echo "[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)"
then
    echo "[ntfs-3g-mac]已安装"
    echo "[ntfs-3g-mac] is installed"
else
    echo "[ntfs-3g-mac]尚未安装,即将开始自动安装"
    echo "[ntfs-3g-mac] is not installed. It'll start installing soon."
    brew tap gromgit/homebrew-fuse
    brew 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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1437468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoo+Vue构建简洁日志文件查看系统

点击下载《SpringBooVue构建日志文件查看系统&#xff08;源代码&#xff09;》 1. 前言 想必经常做java开发的小伙伴&#xff0c;其大多数服务都是运行在linux系统上的&#xff0c;当遇到一些比较棘手的bug需要处理时&#xff0c;经常要上服务器去捞日志&#xff0c;然后通过…

网络空间内生安全数学基础(2)——编码信道数学模型

目录 &#xff08;零&#xff09;这篇博客在干什么&#xff08;一&#xff09;内生安全与香农信道编码定理&#xff08;二&#xff09;基本定义&#xff08;三&#xff09;编码信道存在定理&#xff08;三.壹&#xff09;编码信道存在第一定理&#xff08;三.贰&#xff09;编码…

Python程序员面试题精选(1)

本文精心挑选了10道Python程序员面试题&#xff0c;覆盖了Python的多个核心领域&#xff0c;包括装饰器、lambda函数、列表推导式、生成器、全局解释器锁(GIL)、单例模式以及上下文管理器等。每道题都附有简洁的代码示例&#xff0c;帮助读者更好地理解和应用相关知识点。 题目…

数据结构与算法之美学习笔记:50 | 索引:如何在海量数据中快速查找某个数据?

目录 前言为什么需要索引&#xff1f;索引的需求定义构建索引常用的数据结构有哪些&#xff1f;总结引申 前言 本节课程思维导图&#xff1a; 在第 48 节中&#xff0c;我们讲了 MySQL 数据库索引的实现原理。MySQL 底层依赖的是 B 树这种数据结构。留言里有同学问我&#xff…

《山雨欲来-知道创宇 2023 年度 APT 威胁分析总结报告》

下载链接: https://pan.baidu.com/s/1eaIOyTk12d9mcuqDGzMYYQ?pwdzdcy 提取码: zdcy

VSCode无法启动:Waiting for server log...

问题基本情况 [13:30:20.720] > code 1.86.0 (commit 05047486b6df5eb8d44b2ecd70ea3bdf775fd937) [13:30:20.724] > Running ssh connection command... /var/fpwork/reiss/vscdata/server/cplane/.vscode-server/code-05047486b6df5eb8d44b2ecd70ea3bdf775fd937 comman…

C++中的析构函数

一、析构函数概念 析构函数不是完成对象的销毁&#xff0c;对象的销毁是由编译器完成的。析构函数完成的是对象中资源的清理工作。通常是对对象中动态开辟的空间进行清理。 二、析构函数特性 1.析构函数的函数名是 ~类名 2.析构函数无参数无返回值 3.一个类中只能有一个析…

有趣的CSS - 旋转的太极图

目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 使用 :before 、:after 伪元素以及 animation 属性画一个顺时针旋转的太极图。 核心代码部分&#xff0c;简要说明了写法思路&#xff1b;完整代码在最后&#xff0c;可直接复…

python 函数式编程入门:Lambda 函数的魅力

python 函数式编程入门&#xff1a;Lambda 函数的魅力 介绍Lambda 函数的应用排序过滤映射map、filter、reduce数据转换和筛选 介绍 Lambda 函数是 Python 中一个强大的功能&#xff0c;它可以快速创建匿名函数。在函数式编程中&#xff0c;lambda 函数发挥着至关重要的作用。…

消息队列使用的四种场景介绍

一、简介 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题。 实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 使用较多的消息队列有ActiveMQ&#xff0c;RabbitMQ&#xff0c;ZeroMQ…

java内部类概述及使用方法

前言&#xff1a; 打好基础&#xff0c;daydayup! 内部类 内部类概述&#xff1a; 内部类是类的五大成分之一&#xff08;成员变量&#xff0c;方法&#xff0c;构造器&#xff0c;内部类&#xff0c;代码块&#xff09;&#xff0c;如果一个类定义在另一个类的内部&#xff…

『运维备忘录』之 Yum 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

什么是UI设计?

用户界面&#xff08;UI&#xff09;它是人与机器互动的载体&#xff0c;也是用户体验&#xff08;UX&#xff09;一个组成部分。用户界面由视觉设计 (即传达产品的外观和感觉) 和交互设计 (即元素的功能和逻辑组织) 两部分组成。用户界面设计的目标是创建一个用户界面&#xf…

新版本nginx安装提示需要openssl的问题

新版本的nginx安装的时候未发现openssl的路径&#xff0c;有两种方式解决 方式一&#xff1a; 找到本地nginx的解压目录中 &#xff0c;例如我的放到root下面了。 进入 /root/nginx1.24.0/auto/lib/openssl/conf 目录下修改内容 &#xff0c;这两行都需要修改&#xff0c;…

TCP 粘包/拆包

文章目录 概述粘包拆包发生场景解决TCP粘包和拆包问题的常见方法Netty对粘包和拆包问题的处理小结 概述 TCP的粘包和拆包问题往往出现在基于TCP协议的通讯中&#xff0c;比如RPC框架、Netty等 TCP 粘包/拆包 就是你基于 TCP 发送数据的时候&#xff0c;出现了多个字符串“粘”…

微信小程序(三十七)选项点击高亮效果

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.选择性渲染类 2.以数字为需渲染内容&#xff08;数量&#xff09; 源码&#xff1a; index.wxml <view class"Area"><!-- {{activeNumindex?Active:}}是选择性添加类名进行渲染 -->&l…

P1808 单词分类

P1808 单词分类 题目描述 Oliver 为了学好英语决定苦背单词&#xff0c;但很快他发现要直接记住杂乱无章的单词非常困难&#xff0c;他决定对单词进行分类。 两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。 例如 AABAC&#xff0c;它和 CBAAA 就可以…

Linux(三)--文件系统

Linux命令简介 [rootlocalhost ~]# 表示 Linux 系统的命令提示符。 []&#xff1a;这是提示符的分隔符号&#xff0c;没有特殊含义。 root&#xff1a;显示的是当前的登录用户&#xff0c;笔者现在使用的是 root 用户登录。 &#xff1a;分隔符号&#xff0c;没有特殊含义。 l…

【数据分享】1929-2023年全球站点的逐月平均降水量(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全…

多维数组和多维指针

文章目录 No1No2No3No4No5No6 一定要理解跨度 No1 #include <iostream> using namespace std; int main() {int a[]{1,2,3,4,5};//&a1是整个数组的一个跨度&#xff08;无论a是多少维数组&#xff09;int *p (int*)(&a1);cout<< *(a1) <<endl;//2…