• 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
    

      

  • 相关阅读:
    Restart
    Tired
    Money,Right or Nation?
    End
    Cooperation
    【kooboo】代码块
    [kooboo]创建站点过程
    [kooboo] 使用 SQL Server 进行持久化 方法
    两种实现模式,还是选择2,少一层继承。
    读取进程内所有用户Session
  • 原文地址:https://www.cnblogs.com/alighie/p/8033354.html
Copyright © 2020-2023  润新知