目录博客主页: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 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)