在Python中,"chmod -R u+x $path"的等效命令是什么?

3

这个bash命令在Python中的等效命令是什么?

chmod -R u+x $dir_path

os.fchmod,但不确定它是否像原始命令一样递归应用。

这个命令是否和我想要的做的一样?

import os
import stat
from pathlib import Path

fd = Path(dir_path).open().fileno()
os.fchmod(fd, stat.S_IXUSR)

也许可以使用 os.walk(path) 遍历目录,然后逐个对文件进行 os.chmod() 操作。不必使用需要文件句柄的 os.fchmod(fd) 变体。当然,你也可以使用 os.system() 运行 chmod 命令。 - jarmod
1
递归设置文件权限的Python方式是什么? - Demi-Lune
@Demi-Lune 差不多,尽管那个问题涉及文件所有权。 - jarmod
1个回答

2
你可以使用 os.chmod,但这只会更改该单个文件或目录的权限。要逐步更改单个文件的权限(通过添加到现有权限),请使用:
import os
import stat

st = os.stat("path/to/file")
os.chmod("/path/to/file", st.st_mode | stat.S_IXUSR)

现在,要递归更改目录中文件的权限,您需要使用os.walk来遍历所有子目录及其文件:
import os
import stat

for root, dirs, files in os.walk("path/to/directory"):
    for name in dirs:
        path = os.path.join(root, name)
        st = os.stat(path)
        os.chmod(path, st.st_mode | stat.S_IXUSR)
    for name in files:
        path = os.path.join(root, name)
        st = os.stat(path)
        os.chmod(path, st.st_mode | stat.S_IXUSR)

以上代码将遍历子目录,并逐步修改权限以仅添加用户执行权限。

还有其他选择,其中一个有趣且明显的选择是:

os.system("chmod -R u+x /path/to/file")

为了以后参考,这里有两个相关的问题:


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