Linux彻底清理空文件夹教程
以下是我实现的shell脚本,自测没有发现异常。
#!/bin/bash
delete_empty_dirs_once(){
local dirPath=$1
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=$1
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 "$1"
使用方法
在需要Linux中,将代码通过vim或者cat写入到一个shell脚本文件,如clean.sh,并通过chmod +x赋予该文件可执行权限,然后通过./<脚本文件名> <待清理的路径>执行清理任务 。例如./clean.sh /root/geoscene/geoscene ,注意路径的最后不要带/。
测试效果
本文的脚本会统计最后删除了多少个空文件夹,并将全部的删除记录打印到控制台,同时将删除文件清单输出到脚本所在文件夹下的output.txt文件中。
#!/bin/bash
delete_empty_dirs_once(){
local dirPath=$1
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=$1
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 "$1"
使用方法
在需要Linux中,将代码通过vim或者cat写入到一个shell脚本文件,如clean.sh,并通过chmod +x赋予该文件可执行权限,然后通过./<脚本文件名> <待清理的路径>执行清理任务 。例如./clean.sh /root/geoscene/geoscene ,注意路径的最后不要带/。
测试效果
本文的脚本会统计最后删除了多少个空文件夹,并将全部的删除记录打印到控制台,同时将删除文件清单输出到脚本所在文件夹下的output.txt文件中。