操作系统错误:[Errno 30] 只读文件系统:'/User'。macOS Catalina

8

我正在为下载文件夹编写排序器,但出现了以下错误。尝试更改权限无效:
chmod: 无法在用户上更改文件模式:操作不允许

import os

from_dir = os.path.dirname('/Users/user/Downloads/')
working_dir = os.walk(from_dir)
to_dir = os.path.dirname('/User/user/Downloads/New Folder/')


def move(folder):
    for roots, dirs, files in folder:
        for file in files:
            src_folder = from_dir + '/' + file
            to_folder = to_dir + '/' + file
            if not os.path.exists(to_dir):
                os.makedirs(to_dir)
            os.rename(src_folder, to_folder)


move(working_dir)

也许有另一种方法来编写这段代码而不需要触及根文件夹?
完整错误信息:
Traceback (most recent call last):
  File "/Users/beknazarnurbek/Documents/PycharmProjects/Move Files/move.py", line 19, in <module>
    move(working_dir)
  File "/Users/beknazarnurbek/Documents/PycharmProjects/Move Files/move.py", line 14, in move
    os.makedirs(to_dir)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/os.py", line 211, in makedirs
    makedirs(head, exist_ok=exist_ok)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/os.py", line 211, in makedirs
    makedirs(head, exist_ok=exist_ok)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/os.py", line 211, in makedirs
    makedirs(head, exist_ok=exist_ok)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/os.py", line 221, in makedirs
    mkdir(name, mode)
OSError: [Errno 30] Read-only file system: '/User'
6个回答

3

那个错误信息有点误导人。在这种情况下,问题是 macOS 上没有 /User 目录。该目录的名称为 /Users

在以下行中

to_dir = os.path.dirname('/User/user/Downloads/New Folder/')

User 应该改为 Users

to_dir = os.path.dirname('/Users/user/Downloads/New Folder/')

发生的情况是 os.mkdirs() 正在尝试在 / 中创建一个名为 User 的目录。这是不可写的。这导致了错误消息。


0
补充现有答案: 你不能写入“input”目录,因为它是只读的。 所以你必须写入另一个目录,比如当前目录的前一个目录。
尝试写入当前目录之前的目录,即在本例中是local,而不是写入user/local/current。

0

只需在设置中将“/static/”更改为“static/”,将“media/”更改为“media”即可。


0
我遇到了另一种情况导致了这个错误 - 我的硬盘没有剩余空间了。通过清理一些空间解决了这个问题。

-1
您已将该文件夹设置为可写权限。只需在终端中使用chmod命令即可:
chmod -R 777 /absolute/path/to/your/folder

19
无论你想要完成什么,使用"chmod 777"是错误和危险的。你需要尽快恢复到合理的权限设置(对于你的用例来说,可能是"chmod 755"),如果你在公共系统上拥有全局可写的系统文件,至少需要调查是否可能被攻击并作为进入你组织网络的枢纽点。 - tripleee

-2

刚刚移除了os.path.dirname,然后它就正常工作了。

在我移除了os.path.dirname之后,它可以工作,但不是我期望的方式。然后尝试修复这个问题时,我搞砸了文件系统权限,只好重新安装操作系统。现在它运行得很好。


5
所以这并不是对问题的真正回答。我认为实际问题在于你的文件系统挂载为只读(如错误消息中所述),重新安装操作系统似乎解决了你的问题。顺便说一句:重新安装有点过度,你可能可以更改挂载选项来解决问题,而无需完全重新安装。 - wovano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接