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