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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM