需求:输入文件夹名,扫描并删除该文件夹下的空文件,并判断如果该文件夹为空,则删除该空文件夹。
思路:
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