为了账号安全,请及时绑定邮箱和手机立即绑定

Golang chmod文件和目录递归

Golang chmod文件和目录递归

Go
慕工程0101907 2023-01-03 11:20:43
我正在尝试使用WalkDirwithChmod递归更改目录及其文件和子目录的权限。它以某种方式只是更改给定路径的第一个文件或目录,然后停止。有人可以发现错误吗?getFileMode只是转换字符串“755”os.FileMode(0755)并返回它。func ChmodRec(path string, di fs.DirEntry, err error) error {    fileMode, err2 := getFileMode(os.Getenv("CHMOD_MODE"))    if err2 != nil {        log.Fatal("Could not set file mode for chmodding", path)        panic(err)    }    err2 = os.Chmod(path, fileMode)    if err2 != nil {        fmt.Println("Could not chmod", path)        panic(err)    }    fmt.Println("Changing mode of", path)    return nil}func ChmodRecursive(path string, mode string) {    os.Setenv("CHMOD_MODE", mode)    err := filepath.WalkDir(path, ChmodRec)    if err != nil {        log.Fatal("Could not chmod recursively ", path)        panic(err)    }}func main() {    path := "bla/test/"    mode := "755"    ChmodRecursive(path, mode)}
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您的代码不err检查ChmodRec. 这是官方文档的摘录:

WalkDir 在两种情况下使用非 nil err 参数调用该函数。

首先,如果根目录上的初始 fs.Stat 失败,WalkDir 调用函数,路径设置为 root,d 设置为 nil,err 设置为来自 fs.Stat 的错误。

其次,如果目录的 ReadDir 方法失败,WalkDir 将调用该函数,其中 path 设置为目录的路径,d 设置为描述目录的 fs.DirEntry,err 设置为来自 ReadDir 的错误。在第二种情况下,该函数使用目录路径被调用两次:第一次调用是在尝试读取目录之前,并将 err 设置为 nil,使该函数有机会返回 SkipDir 并完全避免 ReadDir。第二次调用是在 ReadDir 失败之后并报告来自 ReadDir 的错误。(如果 ReadDir 成功,则没有第二次调用。)

将此代码添加到函数的开头。它可以给你一个提示:

func ChmodRec(path string, di fs.DirEntry, err error) error { 
       if err != nil {
            log.Fatal(err)
        }


查看完整回答
反对 回复 2023-01-03
  • 1 回答
  • 0 关注
  • 288 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号