慕工程0101907
2023-01-03 11:20:43
我正在嘗試使用WalkDirwithChmod遞歸更改目錄及其文件和子目錄的權(quán)限。它以某種方式只是更改給定路徑的第一個文件或目錄,然后停止。有人可以發(fā)現(xiàn)錯誤嗎?getFileMode只是轉(zhuǎn)換字符串“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貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個贊
您的代碼不err
檢查ChmodRec
. 這是官方文檔的摘錄:
WalkDir 在兩種情況下使用非 nil err 參數(shù)調(diào)用該函數(shù)。
首先,如果根目錄上的初始 fs.Stat 失敗,WalkDir 調(diào)用函數(shù),路徑設(shè)置為 root,d 設(shè)置為 nil,err 設(shè)置為來自 fs.Stat 的錯誤。
其次,如果目錄的 ReadDir 方法失敗,WalkDir 將調(diào)用該函數(shù),其中 path 設(shè)置為目錄的路徑,d 設(shè)置為描述目錄的 fs.DirEntry,err 設(shè)置為來自 ReadDir 的錯誤。在第二種情況下,該函數(shù)使用目錄路徑被調(diào)用兩次:第一次調(diào)用是在嘗試讀取目錄之前,并將 err 設(shè)置為 nil,使該函數(shù)有機(jī)會返回 SkipDir 并完全避免 ReadDir。第二次調(diào)用是在 ReadDir 失敗之后并報告來自 ReadDir 的錯誤。(如果 ReadDir 成功,則沒有第二次調(diào)用。)
將此代碼添加到函數(shù)的開頭。它可以給你一個提示:
func ChmodRec(path string, di fs.DirEntry, err error) error { if err != nil { log.Fatal(err) }
- 1 回答
- 0 關(guān)注
- 230 瀏覽
添加回答
舉報
0/150
提交
取消