递归创建具有特定所有者和组的目录

F21*_*F21 4 go

我想递归地创建一个目录,并为创建的文件夹及其父级分配所有者和组。

例如,假设/var存在,我想创建/var/test1/test2/test3.

我可以使用os.MkdirAll("/var/test1/test2/test3", 0600).

但是,我还想设置test1test2、 和test3uidtouser1gidto user1

可以使用 来做到这一点os.Chown,但这需要大量的手动工作。我需要在创建文件夹链之前构建一个不存在的文件夹及其父级的树,然后os.Chown在创建后在每个文件夹上使用。

有没有更简单的方法?

Von*_*onC 7

有点像这种ChownR()类型的函数,其想法是过滤步行,并将 chown 仅应用于作为参数传递的路径一部分的文件夹(此处"/var/test1/test2/test3

不带过滤器:

func ChownR(path string, uid, gid int) error {
    return filepath.Walk(path, func(name string, info os.FileInfo, err error) error {
        if err == nil {
            err = os.Chown(name, uid, gid)
        }
        return err
    })
}
Run Code Online (Sandbox Code Playgroud)

换句话说,有了filepath.Walk(),这里不应该涉及太多的“手工工作”。