欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年04月30日 09:30:41   作者:wj199395  
這篇文章主要介紹了Golang 刪除文件并遞歸刪除空目錄的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

目的:

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

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()
    }
}

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

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

然后然后使用os.RemoveAll進(jìn)行迭代并刪除每個子項。

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文件夾本身

補(bǔ)充: Go 遞歸刪除空目錄

這個可以通過shell腳本來達(dá)到目的

find -type d -empty|xrags rmdir

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

放在這里做個記錄

package main 
import (
 "fmt"
 "io/ioutil"
 "os"
 "path"
)
 
func findEmptyFolder(dirname string) (emptys []string, err error) {
 // Golang學(xué)習(xí) - 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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • go modules中replace使用方法

    go modules中replace使用方法

    這篇文章主要為大家介紹了go modules中replace使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang 處理浮點數(shù)遇到的精度問題(使用decimal)

    Golang 處理浮點數(shù)遇到的精度問題(使用decimal)

    本文主要介紹了Golang 處理浮點數(shù)遇到的精度問題,不使用decimal會出大問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Go和Java算法詳析之分?jǐn)?shù)到小數(shù)

    Go和Java算法詳析之分?jǐn)?shù)到小數(shù)

    這篇文章主要給大家介紹了關(guān)于Go和Java算法詳析之分?jǐn)?shù)到小數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-08-08
  • 深入理解Go語言中接口的使用

    深入理解Go語言中接口的使用

    在現(xiàn)代編程語言中,接口是不可或缺的一個重要特性,這篇文章將為大家詳細(xì)介紹Go語言中的接口,從而能夠更好得使用Go語言,需要的可以參考一下
    2023-06-06
  • Golang::slice和nil的對比分析

    Golang::slice和nil的對比分析

    這篇文章主要介紹了Golang::slice和nil的對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 如何在Go中使用切片容量和長度

    如何在Go中使用切片容量和長度

    這篇文章主要介紹了如何在Go中使用切片容量和長度,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 詳解Go如何實現(xiàn)協(xié)程并發(fā)執(zhí)行

    詳解Go如何實現(xiàn)協(xié)程并發(fā)執(zhí)行

    線程是通過本地隊列,全局隊列或者偷其它線程的方式來獲取協(xié)程的,目前看來,線程運(yùn)行完一個協(xié)程后再從隊列中獲取下一個協(xié)程執(zhí)行,還只是順序執(zhí)行協(xié)程的,而多個線程一起這么運(yùn)行也能達(dá)到并發(fā)的效果,接下來就給給大家詳細(xì)介紹一下Go如何實現(xiàn)協(xié)程并發(fā)執(zhí)行
    2023-08-08
  • golang實現(xiàn)多協(xié)程下載文件(支持?jǐn)帱c續(xù)傳)

    golang實現(xiàn)多協(xié)程下載文件(支持?jǐn)帱c續(xù)傳)

    本文主要介紹了golang實現(xiàn)多協(xié)程下載文件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 詳解Go語言中for循環(huán),break和continue的使用

    詳解Go語言中for循環(huán),break和continue的使用

    這篇文章主要通過一些示例為大家介紹一下Go語言中for循環(huán)、break和continue的基本語法以及使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-06-06
  • Golang使用Token來驗證

    Golang使用Token來驗證

    token指的是一種用于驗證用戶身份或授權(quán)訪問的憑證,本文主要介紹了Golang使用Token來驗證,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08

最新評論