更改文件夹,所有子文件夹和所有文件的权限

时间:2011-07-29 14:50:40

标签: python

我正在尝试调用shutil.rmtree(some_folder),但是它导致了另一个进程正在使用子树中的某个文件的错误。事实并非如此,所以我假设权限设置不正确。

如何将某些root下的所有子文件夹和文件的权限更改为可写,因此我可以调用shutil.rmtree并将其删除?

由于

2 个答案:

答案 0 :(得分:9)

在具有chmod命令的平台上,您可以这样做:

subprocess.call(['chmod', '-R', '+w', some_folder])

假设some_folder是一个字符串,它是您要修改的文件夹的完整路径。

答案 1 :(得分:6)

使用os

import os
def change_permissions_recursive(path, mode):
    for root, dirs, files in os.walk(path, topdown=False):
        for dir in [os.path.join(root,d) for d in dirs]:
            os.chmod(dir, mode)
        for file in [os.path.join(root, f) for f in files]:
            os.chmod(file, mode)

如果你只是想让它们在标志之外可写:

import os, stat
def get_perm(fname):
    return stat.S_IMODE(os.lstat(fname)[stat.ST_MODE])

def make_writeable_recursive(path):
    for root, dirs, files in os.walk(path, topdown=False):
        for dir in [os.path.join(root, d) for d in dirs]:
            os.chmod(dir, get_perm(dir) | os.ST_WRITE)
        for file in [os.path.join(root, f) for f in files]:
            os.chmod(file, get_perm(file) | os.ST_WRITE)

如果您使用的是Windows,则可能无法正常使用,请参阅os.chmod的文档。