iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >从树中清除仅包含空文件夹的文件夹
  • 534
分享到

从树中清除仅包含空文件夹的文件夹

2024-02-09 10:02:50 534人浏览 薄情痞子
摘要

PHP小编小新在这里为大家介绍一个有关文件夹操作的小技巧——如何从树中清除仅包含空文件夹的文件夹。在日常的文件管理中,我们可能会遇到一些只包含空文件夹的文件夹,这些文件夹占用了存储空间

PHP小编小新在这里为大家介绍一个有关文件夹操作的小技巧——如何从树中清除仅包含空文件夹的文件夹。在日常的文件管理中,我们可能会遇到一些只包含空文件夹的文件夹,这些文件夹占用了存储空间,但却没有实际的内容。通过以下简单的操作,我们可以轻松地清除这些空文件夹,释放宝贵的存储空间,提高文件管理的效率。

问题内容

我有一片

type node struct {
   id       string
   children []node
}

我有一个以此切片为模型的目录结构。该目录中可能存在多层文件夹结构,最终其中没有任何文件。请参阅:ű

folder1/folder2/folder3/folder4
folder1/file1.txt

我想清理那些只有空文件夹的文件夹。因此,在此示例中,只有folder1 中会保留一个文件,下面的所有内容都将被删除。 但是我似乎想不出这样做的好主意。我完全可以创建一棵新树而不改变原始树,但我不知道如何有效地遍历这棵树并查看最后一个孩子是否没有孩子,然后返回到根并删除该孩子结果只是一个空文件夹列表。 任何想法都会受到欢迎!

我的初始解决方案仅删除叶子而不删除父文件夹:

func removeChildlessFolders(original, tree []Node) []Node {
    for i, node := range original {
        if len(node.Children) == 0 {
            continue
        }

        dir := Node{}
        dir.Id = node.Id
        dir.Children = append(dir.Children, node.Children...)
        tree = append(tree, dir)
        removeChildlessFolders(original[i].Children, node.Children)
    }

    return tree
}

解决方法

首先是个好问题,但其他人很难重现您拥有的用例。从下次开始尝试添加可重现的代码,人们可以使用它并快速测试他们的方法并给出结果。就像您已经传递了根但您如何初始化它一样?如果有人需要帮助你,他们需要先建树。一般来说,这是不方便的。尽管如此,让我们来看看解决方案。

目录结构

输入dir

test-folder
├── folder1
│   └── folder2
│       └── folder3
├── folder4
│   ├── folder5
│   └── joker
└── folder6
    └── file.txt

预期结果

test-folder
└── folder6
    └── file.txt

节点定义

首先,我不知道你是如何创建目录树的。如果您对它进行了硬编码,那么这是一个不同的问题,但是 n-ary 树通常填充的方式,那么您需要使用自引用指针定义 node 。不是精确切片。所以我会按以下方式定义节点

type node struct {
    id       string
    children []*node
}

辅助方法

这是一个检查路径是否指向目录的辅助方法

func ifdir(path string) bool {
    file, err := os.open(path)
    if err != nil {
        panic(err)
    }
    defer file.close()
    info, err := file.stat()
    if err != nil {
        panic(err)
    }
    if info.isdir() {
        return true
    }
    return false
}

如何填充树

这是使用 queue 输入 n-ary 树 的简单迭代方法。 golang不提供队列实现,但Golang通道实际上只是队列。我将其保留为 500 因为我们无法在 golang 中创建动态缓冲通道。恕我直言,这个数字应该适用于几乎所有场景。

func buildtreefromdir(basedir string) *node {
    _, err := ioutil.readdir(basedir)
    if err != nil {
        return nil
    }
    root := &node{
        id: basedir,
    }
    //////////
    queue := make(chan *node, 500) // consider that there can not be any dir with > 500 depth
    queue <- root
    for {
        if len(queue) == 0 {
            break
        }
        data, ok := <-queue
        if ok {
            // iterate all the contents in the dir
            curdir := (*data).id
            if ifdir(curdir) {
                contents, _ := ioutil.readdir(curdir)

                data.children = make([]*node, len(contents))
                for i, content := range contents {
                    node := new(node)
                    node.id = filepath.join(curdir, content.name())
                    data.children[i] = node
                    if content.isdir() {
                        queue <- node
                    }
                }
            }
        }
    }
    return root
}

另一种辅助方法

这只是打印目录树。仅用于调试目的。

func printdirtree(root *node) {
    fmt.println(root.id)
    for _, each := range root.children {
        printdirtree(each)
    }
    if len(root.children) == 0 {
        fmt.println("===")
    }

}

最后是你的解决方案。

非常简单。如果您有任何疑问,请告诉我。

func recursiveemptydelete(root *node) {
    // if the current root is not pointing to any dir
    if root == nil {
        return
    }
    for _, each := range root.children {
        recursiveemptydelete(each)
    }
    if !ifdir(root.id) {
        return
    } else if content, _ := ioutil.readdir(root.id); len(content) != 0 {
        return
    }
    os.remove(root.id)
}

这里是 main()

func main() {
    root := buildTreeFromDir("test-folder")
    printDirTree(root)
    recursiveEmptyDelete(root)
}

以上就是从树中清除仅包含空文件夹的文件夹的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 从树中清除仅包含空文件夹的文件夹

本文链接: https://www.lsjlt.com/news/562381.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 从树中清除仅包含空文件夹的文件夹
    php小编小新在这里为大家介绍一个有关文件夹操作的小技巧——如何从树中清除仅包含空文件夹的文件夹。在日常的文件管理中,我们可能会遇到一些只包含空文件夹的文件夹,这些文件夹占用了存储空间...
    99+
    2024-02-09
  • bat批处理实现的创建10个文件夹且文件夹再包含5个空文件夹
    这篇文章主要介绍“bat批处理实现的创建10个文件夹且文件夹再包含5个空文件夹”,在日常操作中,相信很多人在bat批处理实现的创建10个文件夹且文件夹再包含5个空文件夹问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-09
  • nodejs怎么清空/删除指定文件夹下面所有文件或文件夹
    这篇“nodejs怎么清空/删除指定文件夹下面所有文件或文件夹”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nodejs怎么...
    99+
    2023-07-06
  • nodejs清空/删除指定文件夹下面所有文件或文件夹的方法示例
    同步函数: //使用fs.readdir()方法读取文件夹中的所有文件和文件夹,然后使用递归来删除每个文件和文件夹。 const fs = require('fs'); const ...
    99+
    2023-05-15
    nodejs 清空 删除 文件夹 文件
  • Python实现遍历包含大量文件的文件夹
    在处理大模型的训练数据时,经常需要遍历大型文件夹,其中,可能包括数千万或数亿个文件,这时,一般的Python遍历函数就会非常慢,例如os.walk、glob、path.rglob等等...
    99+
    2023-05-15
    Python实现遍历文件夹 Python遍历文件夹 Python 文件夹
  • Anaconda中pkgs文件夹及如何清空PKGS
    我在使用conda安装虚拟环境的过程中,下载一些包,比如torch等,发现在虚拟环境中有一份以外,pkgs文件夹下同样也会出现一份,大小一样,这样就让我担心一物多备份导致浪费空间的问...
    99+
    2022-11-13
    Anaconda pkgs文件夹 Anaconda pkgs anaconda pkgs文件清理 怎么清空PKGS
  • python清空文件夹用什么函数
    python中使用shutil模块的rmtree函数清空文件夹,具体方法如下:shutil.rmtree:shutil.rmtree()函数的作用是递归删除一个文件夹中的所有内容。shutil.rmtree()函数语法:shutil.rmt...
    99+
    2024-04-02
  • 文件夹中的autorun.inf文件怎么删除
    要删除文件夹中的autorun.inf文件,可以按照以下步骤进行操作:1. 打开文件夹,找到包含autorun.inf文件的文件夹。...
    99+
    2023-08-25
    删除
  • 电脑怎么删除空文件夹
    这篇文章给大家分享的是有关电脑怎么删除空文件夹的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、常规解决办法:1,注消或重启电脑,然后再试着删除。2,进入“安全模式删除”。 重启后一直按 F8然后用上下键选择安全...
    99+
    2023-06-28
  • php怎样删除文件夹中的文件
    这篇“php怎样删除文件夹中的文件”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“php怎样删除文件夹中的文件”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入...
    99+
    2023-06-06
  • php怎么删除非空文件夹
    小编给大家分享一下php怎么删除非空文件夹,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php删除非空文件夹的方法:首先使用unlink()函数将文件夹中的每个文件都删除掉,语法格式“unlink(filename)”;然...
    99+
    2023-06-14
  • php删除非空文件夹的方法
    这篇文章主要为大家展示了php删除非空文件夹的方法,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“php删除非空文件夹的方法”这篇文章吧。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处...
    99+
    2023-06-06
  • ubuntu怎么删除非空文件夹
    在Ubuntu中,您可以使用`rm`命令来删除非空文件夹。以下是删除非空文件夹的命令:```shellrm -r /path/to/folder```请将`/path/to/folder`替换为您要删除的文件夹的实际路径。请注意,`-r...
    99+
    2023-08-09
    ubuntu
  • 在OneDrive中删除文件或文件夹
    要在OneDrive中删除文件或文件夹,请按照以下步骤操作:1. 打开OneDrive应用或访问OneDrive网站(https:/...
    99+
    2023-09-13
    OneDrive
  • Python怎么实现遍历包含大量文件的文件夹
    本篇内容主要讲解“Python怎么实现遍历包含大量文件的文件夹”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现遍历包含大量文件的文件夹”吧!在处理大模型的训练数据时,经常需要遍...
    99+
    2023-07-06
  • linux 删除指定文件夹外的其他所有(文件)文件夹
    文章目录 方法一. 删除指定文件夹外的其他所有文件夹命令:方法二. 删除指定文件夹外的其他所有文件夹命令:三. 其他方法(没有验证)1、方法1,比较麻烦的做法是:2、方法2,需要在当前文件夹中...
    99+
    2023-09-16
    linux 服务器 unix
  • java如何读取某个文件夹中的全部文件(包括子文件夹)
    目录java读取某个文件夹中的全部文件主要思路示例java获取文件夹下指定的文件java读取某个文件夹中的全部文件 主要思路 使用file.listFiles()函数可以获取到某文...
    99+
    2022-12-03
    java读取文件 java读取全部文件 java读取子文件夹
  • Python实现清除文件夹中重复视频
    目录前言1.科普二进制文件摘要算法(MD5)shutil模块2.视频清除视频全在一个文件夹里视频在不同的文件夹里3.总结前言 在早期学Python的时候,买了一本《Python编程快...
    99+
    2024-04-02
  • win10如何将文件夹从文件历史记录中排除
    这篇文章给大家分享的是有关win10如何将文件夹从文件历史记录中排除的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。登录win10系统桌面,右键开始菜单,点击打开“控制面板(P)”。在打开的控制面板所有控制面板项窗...
    99+
    2023-06-28
  • 批处理如何删除空文件夹
    这篇文章将为大家详细讲解有关批处理如何删除空文件夹,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现代码:代码如下:@echo off for /f "tokens=*" %%a in...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作