仅对目录递归执行Chmod操作?

3

对我没有用:

target_dir = "a/b/c/d/e/"
os.makedirs(target_dir,0777) 

os.chmod work only for last directory ...

3个回答

10
你可以使用os.walk来遍历目录。(以下内容未经过测试,请自行尝试)
for r, d, f in os.walk(path):
    os.chmod(r, 0o777)

不错!我可以确认它对我有效。诀窍在于 topdown 默认为 True。我担心它会尝试遍历一个没有权限的目录。 - Adrian Ratnapala
实际上我错了 - 我没有正确地测试它: 它会对应该被修改权限的目录的父目录进行chmod操作。我的下面的答案确实对我有效。 - Adrian Ratnapala

1

ghostdog74的答案几乎可行,但它在chmod之前尝试进入目录。所以真正的答案不太优雅:

os.chmod(path , 0o777)
for root,dirs,_ in os.walk(path):
    for d in dirs :
        os.chmod(os.path.join(root,d) , 0o777)

我会在内部循环中明确地使用chmod。你的文件通常需要与目录不同的权限,因此将它们分为两行代码是有意义的。 - Adrian Ratnapala

-1

这个的一行版本是:

list(map(lambda x: os.chmod(x[0], 0o775), os.walk(target_dir)))

当你需要使用Python控制台进行这些更改时,使用更易读的for循环版本可能更适合在生产代码中使用。


只需使用列表推导式,[os.chmod(root, 0o755) for root, dirs, files in os.walk(target_dir)] - Kyuuhachi

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