linux编程:删除文件夹下的空文件

  需求:输入文件夹名,扫描并删除该文件夹下的空文件,并判断如果该文件夹为空,则删除该空文件夹。

  思路:

  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

  

原文地址:https://www.cnblogs.com/alighie/p/8033354.html