需求:輸入文件夾名,掃描並刪除該文件夾下的空文件,並判斷如果該文件夾為空,則刪除該空文件夾。
思路:
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
