Linux删除空目录

今天整理东西。需要删掉小于5M的文件。一个find就可以了

find . -type f -size -5M -exec rm -f {} \;

然后需要删掉所有的空目录。没想到简单的命令,于是组合一下命令

#!/bin/bash
#filename:rm_empty_dir.sh
for i in `find . -type d`
do
    if [ `ls  $i | wc -l`  =  0 ]
    then
        rm -rf $i
    fi
done

用while

#!/bin/bash
#filename:rm_empty_dir_2.sh
find . -type d | while read dir
do
    if [ `ls $dir | wc -l` = 0 ]
    then
        rm -rf $dir
    fi
done

这俩个都可以达到目的,但是如果一个空目录里面还有子空目录的话,父空目录将不会被删除,于是改进一下

#!/bin/bash
#filename:rm_empty_dir_3.sh
for i in `find . -type d`
do
    if [ `find $i -type f | wc -l`  =  0 ]
    then
        rm -rf $i
    fi
done

这回可以删除空目录套空目录了,不过还有一个缺陷,把父空目录删掉以后,for循环的i读到子空目录名的时候会报错,因为已经和父目录一起被删。。执行的时候把错误信息重定向到/dev/null吧

 

再改改,改通用点

#!/bin/bash
#filename:rm_empty_dir_4.sh
if [ $# -ne 1 ]
then
    echo "Usage: $0 [path]"
else

    for i in `find $1 -type d`
    do
        if [ `find $i -type f 2>/dev/null | wc -l`  =  0 ]
        then
            rm -rf $i
        fi
    done
fi

 

支持一下多目录。。

#!/bin/bash
#filename:rm_empty_dir_5.sh
if [ $# -lt 1 ]
then
    echo "Usage: $0 [path]"
else
    for i in `echo "$*"`
    do
        for j in `find $i -type d`
        do
            if [ 0 -eq `find $j -type f 2>/dev/null | wc -l` ]
            then
                rm -rf $j
            fi
        done
    done
fi

 

 

 

 

posted @ 2012-07-08 00:29  Leo Forest  阅读(1765)  评论(0编辑  收藏  举报