主頁 > 知識庫 > Golang 刪除文件并遞歸刪除空目錄的操作

Golang 刪除文件并遞歸刪除空目錄的操作

熱門標簽:百度地圖標注后傳給手機 外呼系統(tǒng)顯本地手機號 excel地圖標注分布數(shù)據(jù) 評價高的400電話辦理 外呼系統(tǒng)用什么卡 阿克蘇地圖標注 電話機器人軟件免費 涿州代理外呼系統(tǒng) 壽光微信地圖標注

目的:

刪除文件之后,如果目錄為空,遞歸刪除為空的目錄。

svr.dataDir指目錄的最外層,遞歸刪除目錄的時候判斷到這一層即可。

eg:/Users/danny/data

func deleteFileOnDisk(localPath string) {
    log.Debugf("remove file: %s", localPath)
    if err := os.Remove(localPath); err != nil {
        log.Error(err)
    }
    dirsList := make([]string, 0, 0)
    for dir := path.Dir(localPath); dir != svr.dataDir  len(dir) > len(svr.dataDir); dir = path.Dir(dir) {
        dirsList = append(dirsList, dir)
    }
    sort.StringSlice(dirsList).Sort()
    for i := len(dirsList) - 1; i >= 0; i-- {
        f, err := os.Open(dirsList[i])
        if err != nil {
            log.Error(err)
        }
        fs, err2 := f.Readdirnames(1)
        if err2 == io.EOF  (fs == nil || len(fs) == 0) {
            f.Close()
            log.Debugf("remove dir: %s", dirsList[i])
            if err := os.Remove(dirsList[i]); err != nil {
                log.Error(err)
            }
            continue
        } else if err2 != nil {
            log.Error(err2)
        }
        f.Close()
    }
}

補充:golang 刪除目錄所有內(nèi)容

只需使用ioutil.ReadDir即可獲得os.FileInfo類型的切片

然后然后使用os.RemoveAll進行迭代并刪除每個子項。

package main 
import (
    "io/ioutil"
    "os"
    "path"
)
 
func main() {
    dir, err := ioutil.ReadDir("/tmp")
    for _, d := range dir {
        os.RemoveAll(path.Join([]string{"tmp", d.Name()}...))
    }
}

這樣,你將僅刪除所有子項,而不刪除父/tmp文件夾本身

補充: Go 遞歸刪除空目錄

這個可以通過shell腳本來達到目的

find -type d -empty|xrags rmdir

寫這個是因為有個 windows 的服務器,又不熟悉批處理和powershell腳本,就寫了這么個玩意

放在這里做個記錄

package main 
import (
 "fmt"
 "io/ioutil"
 "os"
 "path"
)
 
func findEmptyFolder(dirname string) (emptys []string, err error) {
 // Golang學習 - io/ioutil 包
 // https://www.cnblogs.com/golove/p/3278444.html
 
 files, err := ioutil.ReadDir(dirname)
 if err != nil {
  return nil, err
 }
 // 判斷底下是否有文件
 if len(files) == 0 {
  return []string{dirname}, nil
 }
 
 for _, file := range files {
  if file.IsDir() {
   edirs, err := findEmptyFolder(path.Join(dirname, file.Name()))
   if err != nil {
    return nil, err
   }
   if edirs != nil {
    emptys = append(emptys, edirs...)
   }
  }
 }
 return emptys, nil
}
 
func main() {
 if len(os.Args) != 2 {
  fmt.Println("Usage:", os.Args[0], "起始路徑")
  return
 }
 emptys, err := findEmptyFolder(os.Args[1])
 if err != nil {
  fmt.Println(err.Error())
  return
 }
 for _, dir := range emptys {
  if err := os.Remove(dir); err != nil {
   fmt.Println("錯誤:", err.Error())
  } else {
   fmt.Println("刪除成功:", dir)
  }
 }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 解決go build不去vendor下查找包的問題
  • 解決GOPATH在GOLAND中的坑
  • golang 如何刪除二進制文件中的源碼路徑信息
  • Golang 文件操作:刪除指定的文件方式
  • go run main.go 一直提示找不到包的解決方案

標簽:吐魯番 銅川 重慶 欽州 梅河口 蘭州 汕頭 雞西

巨人網(wǎng)絡通訊聲明:本文標題《Golang 刪除文件并遞歸刪除空目錄的操作》,本文關鍵詞  Golang,刪除,文件,并,遞歸,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang 刪除文件并遞歸刪除空目錄的操作》相關的同類信息!
  • 本頁收集關于Golang 刪除文件并遞歸刪除空目錄的操作的相關信息資訊供網(wǎng)民參考!
  • 推薦文章