【问题标题】:AppleScript How to copy file to system pathAppleScript 如何将文件复制到系统路径
【发布时间】:2021-10-11 03:53:26
【问题描述】:

我写了一个 AppleScript

执行shell脚本“mv /Users/xxx/Documents/1.png /usr/local/” 具有管理员权限

但它失败并返回“不允许操作”。

我知道 Apple 不允许将文件复制到 /usr/local。但是如果我将目标文件夹从“/usr/local/”更改为“/Users/xxx/Desktop/”,脚本也会失败。

此外,像这样的脚本都成功了。 ↓↓↓

以管理员权限执行 shell script "touch /usr/local/1.txt"

使用管理员权限执行 shell 脚本“mkdir /usr/local/testfolder”

为什么创建文件或文件夹最终成功但复制文件失败?

【问题讨论】:

  • "Apple 不允许将文件复制到 /usr/local" 您不能随意访问任何位置。
  • RE:“Apple 不允许将文件复制到 /usr/local”——这句话不正确!正确完成后,我将 文件 复制/移动到/usr/local/ 没有问题,并且所有适当的权限都已根据复制/移动的完成方式获得授权。

标签: macos applescript


【解决方案1】:

在最新版本的 ma​​cOS 中,如果您想从默认的文件夹中复制/移动 文件/文件夹,不确定要追溯到多远> 您的 Home 文件夹 到例如/usr/local 使用 do shell script command 在例如脚本编辑器,然后需要先将其复制/移动到 文件夹,该文件夹不在您 Home文件夹 中/strong> 文件夹

换句话说,如果 文件/文件夹 位于 Home 文件夹root 中,则公共 文件夹,或用户在您的主页 文件夹中创建文件夹 ,那么这不是问题。但是,如果它位于 桌面文档下载电影音乐照片图片,则需要先将文件/文件夹复制/移动到别处,然后然后到/usr/local

以下示例 AppleScript 代码 适合我:

do shell script "mv ~/Documents/1.png ~/Public/"
do shell script "mv ~/Public/1.png /usr/local/" with administrator privileges

注意事项:

在我需要这样做的脚本中,我首先将文件/文件夹复制/移动到/private/tmp/,因为我确信我不会意外覆盖我的 Home 文件夹中其他地方的东西。

也就是说,虽然我当然可以看到想要在 Finder 上使用 do shell scriptcommand 的原因,但是,Finder 是一个其他答案中提到的可行选项。

示例 AppleScript 代码,如上所示,在 ma​​cOS Catalina 下的 Script Editor 中进行了测试系统偏好设置 中的 语言和地区 设置设置为 英语(美国)- 主要 并且为我工作没有问题 1.

  • 1 假设 系统偏好设置 > 安全和隐私 > 隐私中的必要和适当的设置已设置/根据需要解决。

【讨论】:

    【解决方案2】:

    显示的两种情况(“/usr/local/”和桌面)在新系统上受到不同的保护,对其行为有不同的解释。

    1. 桌面。要使用 "mv" 命令将文件移动到桌面,您只需授予此命令访问桌面的权限(或完整的磁盘访问权限)。因为它是一个非系统位置,尽管有一些保护。

    2. “/usr/local/”文件夹。这是一个受 SIP 保护的系统文件夹。因此,仅授予对它的访问权限将无济于事。通常建议通过两次计算机重新启动来暂时禁用 SIP,等等。

    我个人认为这个建议很糟糕。最好放弃“mv”命令,让系统自己移动只允许给它的东西。

    set thePNG to (choose file of type "png") as text
    set usrLocalFolder to ((path to (startup disk)) as text) & "usr:local"
    
    tell application "Finder" to move file thePNG to folder usrLocalFolder
    -- tell application "Finder" to move file thePNG to desktop
    

    【讨论】:

    • 当有机会以方便的形式获取信息时,我不会试图以复杂的形式获取相同的东西,以便在某人看来比我更聪明(终端,ls,drwxr -xr-x 等等)。只需使用“获取信息”菜单查看有关给定文件夹的信息,即可在我的 Mac 上提供以下信息。 系统:读写,Whell:只读,每个人:只读。什么都没有编码,一切都很清楚。该文件夹是系统的并受到保护。对于管理员帐户,什么都没有。你甚至不能添加它
    • 我现在不确定它是如何受到保护的,因为它对除系统之外的所有人都是只读的。我展示了将文件移动到此受保护文件夹的解决方案。有一件事我确信 - 如果某个文件夹受 SIP 保护(/usr),那么它的每个文件和子文件夹都受 SIP 保护(例如 /usr/local)
    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    相关资源
    最近更新 更多