需求:输入文件夹名,扫描并删除该文件夹下的空文件,并判断如果该文件夹为空,则删除该空文件夹。
思路:
1、判断该文件夹是否为空文件夹,如果是则删除
2、如果该文件夹不是空文件夹,则递归扫描该文件夹下的所有文件夹与文件,找出空文件后进行删除
具体代码如下
#! /bin/bash
#判断文件是否为空
function judgeEmptyFile() {
flag=0
if [ -s $1 ];then
echo "the "$1" is not empty and file info:"
du -sh $1
return $flag
else
echo "the "$1" is empty"
flag=1
return $flag
fi
}
#如果文件为空,则删除垓文件
function deleteFile(){
echo '要删除的文件是:' $1
rm -rf $1
echo '删除完成'
}
#遍历扫描文件夹中的文件,如果文件为空则删除文件
function scanFold(){
scanflag=1 #判断是否进行了扫描
IFS=$'x0A'
echo "扫描文件夹"
echo '原始路径是:'$1
for scanfile in `ls $1 | paste`
do
scanflag=0 #进行了扫描
echo '路径是:' $1"/"$scanfile
if [ -d $1"/"$scanfile ];then #判断是否是目录
echo "目录:" $1"/"$scanfile
judgeEmptyFolder $1"/"$scanfile
flag=$?
if [ $flag -eq 1 ]; then
scanFold $1"/"$scanfile
fi
else
echo "文件:" $q"/"$scanfile
judgeEmptyFile $1"/"$scanfile
flag=$?
if [ $flag -eq 1 ];then
deleteFile $1"/"$scanfile
fi
fi
done
return $scanflag
}
#判断文件夹是否为空,如果文件夹不为空,则删除文件夹中的空文件。
function judgeEmptyFolder(){
flag=1 #是文件夹
if [ -d $1 ];then
#ls -A 可以显示隐藏文件
if [ `ls $1 | wc -w` -eq 0 ];then
echo '文件夹'$1'为空'
read -p '是否删除空文件夹(y or n)' judge
while ( [ $judge != 'y' ] && [ $judge != 'n' ] )
do
read -p '是否删除空文件夹(y or n)' judge
done
if [ $judge == y ]; then
deleteFile $1
flag=0 #文件夹为空且文件夹以删除
return $flag
elif [ $judge == n ];then
flag=2 #文件夹为空且文件夹未删除
return $flag
fi
else
return $flag #文件夹不为空
fi
else
flag=3 #不是文件夹,是文件
fi
return $flag
}
read -p "请输入要查验的文件夹或文件:" filename
file=`pwd`'/'$filename
judgeEmptyFolder $file
flag=$? #接收上一次函数调用的返回值
if [ $flag == 3 ];then #传入的是文件
judgeEmptyFile $file
judge=$?
if [ $judge == 1 ];then
deleteFile $file
elif [ $judge == 0 ];then
read -p '是否删除该文件(y or n):' deleteflag
echo 'deleteflag=' $deleteflag
while ( [ $deleteflag != "y" ] $$ [ $deleteflag != "n" ] )
do
read -p '是否删除空文件夹(y or n)' deletelag
done
if [ $deleteflag = "y" ]; then
deleteFile $file
elif [ $deleteflag = "n" ];then
echo '文件未删除'
fi
fi
elif [ $flag == 1 ]; then #传入的是文件夹
scanFold $file
scanflag=$?
echo 'scanflag:' $scanflag
echo 'file:'$file
while [ $scanflag -eq 0 ]
do
scanFold $file
done
echo '扫描完成'
fi