最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

目的:

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

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

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)行迭代并刪除每個(gè)子項(xiàng)。

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

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

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

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

find -type d -empty|xrags rmdir

寫這個(gè)是因?yàn)橛袀€(gè) windows 的服務(wù)器,又不熟悉批處理和powershell腳本,就寫了這么個(gè)玩意

放在這里做個(gè)記錄

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("錯(cuò)誤:", err.Error())
  } else {
   fmt.Println("刪除成功:", dir)
  }
 }
}

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

相關(guān)文章

  • go語言實(shí)現(xiàn)Elasticsearches批量修改查詢及發(fā)送MQ操作示例

    go語言實(shí)現(xiàn)Elasticsearches批量修改查詢及發(fā)送MQ操作示例

    這篇文章主要為大家介紹了go語言實(shí)現(xiàn)Elasticsearches批量修改查詢及發(fā)送MQ操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Go高級特性探究之信號處理詳解

    Go高級特性探究之信號處理詳解

    信號是在Unix和類Unix操作系統(tǒng)中用于通知進(jìn)程發(fā)生了事件或異常的通信機(jī)制,本文主要來介紹一下Go中的信號處理的方法,需要的可以參考一下
    2023-06-06
  • GO語言基本類型分析

    GO語言基本類型分析

    這篇文章主要介紹了GO語言基本類型,較為詳細(xì)的分析了整形、浮點(diǎn)型、字符串、指針等類型的具體用法,是深入學(xué)習(xí)GO語言所必須掌握的重要基礎(chǔ),需要的朋友可以參考下
    2014-12-12
  • 關(guān)于go語言編碼需要放到src 文件夾下的問題

    關(guān)于go語言編碼需要放到src 文件夾下的問題

    這篇文章主要介紹了go語言編碼需要放到src 文件夾下的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Go語言基礎(chǔ)變量的聲明及初始化示例詳解

    Go語言基礎(chǔ)變量的聲明及初始化示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)變量的聲明及初始化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • Go中g(shù)in框架的*gin.Context參數(shù)常見實(shí)用方法

    Go中g(shù)in框架的*gin.Context參數(shù)常見實(shí)用方法

    *gin.Context是處理HTTP請求的核心,ctx代表"context"(上下文),它包含了處理請求所需的所有信息和方法,例如請求數(shù)據(jù)、響應(yīng)構(gòu)建器、路由參數(shù)等,這篇文章主要介紹了Go中g(shù)in框架的*gin.Context參數(shù)常見實(shí)用方法,需要的朋友可以參考下
    2024-07-07
  • Golang使用Zookeeper實(shí)現(xiàn)分布式鎖

    Golang使用Zookeeper實(shí)現(xiàn)分布式鎖

    分布式鎖是一種在分布式系統(tǒng)中用于控制并發(fā)訪問的機(jī)制,ZooKeeper?和?Redis?都是常用的實(shí)現(xiàn)分布式鎖的工具,本文就來使用Zookeeper實(shí)現(xiàn)分布式鎖,希望對大家有所幫助
    2024-02-02
  • golang?gorm實(shí)現(xiàn)get請求查詢案例測試

    golang?gorm實(shí)現(xiàn)get請求查詢案例測試

    這篇文章主要為大家介紹了golang?gorm實(shí)現(xiàn)get請求查詢案例測試,
    2022-04-04
  • 淺析Go語言中內(nèi)存泄漏的原因與解決方法

    淺析Go語言中內(nèi)存泄漏的原因與解決方法

    這篇文章主要來和大家聊一聊Go語言中內(nèi)存泄漏的那些事,例如內(nèi)存泄漏的原因與解決方法,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2024-02-02
  • 使用Golang的channel交叉打印兩個(gè)數(shù)組的操作

    使用Golang的channel交叉打印兩個(gè)數(shù)組的操作

    這篇文章主要介紹了使用Golang的channel交叉打印兩個(gè)數(shù)組的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

襄城县| 岳普湖县| 宁远县| 巴彦淖尔市| 大厂| 汝南县| 兴文县| 兖州市| 手机| 普陀区| 和顺县| 信丰县| 晋城| 信阳市| 大余县| 大理市| 三穗县| 巴林左旗| 长春市| 南陵县| 淮北市| 密云县| 资中县| 平顶山市| 沈阳市| 绿春县| 井冈山市| 丹东市| 德庆县| 女性| 马山县| 天全县| 苗栗市| 仙游县| 阳高县| 大田县| 怀化市| 涟水县| 德安县| 胶州市| 韶山市|