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