我正在尝试使用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)
}- 1 回答
- 0 关注
- 288 浏览
添加回答
举报
0/150
提交
取消
