Linux如何彻底清理空文件夹

Linux如何彻底清理空文件夹,第1张

博客主页:https://tomcat.blog.csdn.net
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注💖点赞👍收藏⭐留言💬

目录
  • 代码
  • 使用方法
  • 测试效果
  • 总结

最近工作中遇到一个需求——删除指定路径下的所有空文件夹。这里的空文件夹的认定标准是:如果某个文件夹的子文件夹全是空文件夹,也认为该文件夹是空文件夹。

代码

以下是我实现的shell脚本,自测没有发现异常。

#!/bin/bash
delete_empty_dirs_once(){
  local dirPath=

  if [ ! -d "${dirPath}" ]; then
      echo  "文件夹不存在:${dirPath}"
      return 0
  fi

  local lsStrInDEDO=$(ls -a "${dirPath}")
  local arrayInDEDO=(${lsStrInDEDO})

  if [  ${#arrayInDEDO[@]} -le 2 ]; then
      rm -rf "${dirPath}"
      echo "删除空文件夹:${dirPath}"
      echo "${dirPath}" >>empty_dirs.txt
      emptyDirNumForOnce=$(($emptyDirNumForOnce+1))
      emptyDirNumForAll=$(($emptyDirNumForAll+1))
      return 1
  else
      local flag=0
      for item in "${arrayInDEDO[@]}";do
        local itemPath="${dirPath}/${item}"
        if [ "$item" != "."  ] && [ "$item" != ".." ] && [ -d "${itemPath}"  ]; then
            delete_empty_dirs_once "${dirPath}/${item}"
            if [ $? -eq 1  ]; then
                flag=1
            fi
        fi
      done
      return $flag
  fi
}

delete_empty_dirs(){
  local topDirPath=
  if [ ! -d "${topDirPath}" ]; then
      return 1
  fi
  emptyDirNumForAll=0
  deleteTime=0
  local  flag=1
  while [ $flag -eq  1 ]; do
    emptyDirNumForOnce=0
    deleteTime=$(($deleteTime+1))
    delete_empty_dirs_once "${topDirPath}"
    flag=$?
    echo "第${deleteTime}轮清理,删除了${emptyDirNumForOnce}个空文件夹。"
  done
  echo "进行了${deleteTime}轮清理,总共删除了${emptyDirNumForAll}个空文件夹。"

}

delete_empty_dirs ""
使用方法

在需要Linux中,将代码通过vim或者cat写入到一个shell脚本文件,如clean.sh,并通过chmod +x赋予该文件可执行权限,然后通过./<脚本文件名> <待清理的路径>执行清理任务 。例如./clean.sh /root/geoscene/geoscene ,注意路径的最后不要带/

测试效果

本文的脚本会统计最后删除了多少个空文件夹,并将全部的删除记录打印到控制台,同时将删除文件清单输出到脚本所在文件夹下的output.txt文件中。

总结

本脚本通过循环和递归将整个任务分解成一轮一轮的清理任务,直到再也找不到空文件夹为止。实现方式比较暴力,没有考虑时间复杂度。如果您有更优的解决方案,欢迎通过留言评论进行交流。


如需转载,请注明本文的出处:农民工老王的CSDN博客https://blog.csdn.net/monarch91 。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/733481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存