SKyPP 发表于 2006-10-20 20:50:12

[原创]列出指定目录及其子目录里的所有空目录


#!/bin/bash
# filename: void_dirs_ls.sh
# author: skypp
# description: list void directories of specified directory and its sub directories
# usage: sh ./void_dirs_ls.sh [DIRECTORY]

dirs=($(ls $1 -R | grep : |sed s/://))
for((i=0;i<${#dirs[@]};i++))
do
((i<${#dirs[@]}-1)) && [[ ${dirs[$i+1]} != ${dirs[$i]}* ]] && [[ $(ls ${dirs[$i]}) == '' ]] && echo ${dirs[$i]} && continue || [[ $(ls ${dirs[$i]}) == '' ]] && echo ${dirs[$i]}
done


同事想列出指定目录包括其子目录里的所有空目录,自个写了一个,不知道这里有没有更好的script

BOoRFGOnZ 发表于 2006-10-21 00:45:11

:P不错 不错

SKyPP 发表于 2006-10-22 17:39:38

通常用du来实现好像速度更快一些

#!/bin/bash
# filename: void_dirs_du.sh
# author: skypp
# description: list void directories of specified directory and its sub directories
# usage: sh ./void_dirs_du.sh [DIRECTORY]

dirs=($(du $1 | grep 0 | awk '{print $2}'))
[[ $(ls ${dirs[0]}) == '' ]] && echo ${dirs[0]}
for((i=1;i<${#dirs[@]};i++))
do
[[ ${dirs[$i-1]} != ${dirs[$i]}* ]] && [[ $(ls ${dirs[$i]}) == '' ]] && echo ${dirs[$i]}
done

突然感觉用awk一行就可以实现,请哪位赐教,小弟谢过:)

SKyPP 发表于 2006-10-23 10:49:42

一不小心成精华贴了,呵呵
这次的是一句话的,效率可能低了点,不过也算是一个实现了

#!/bin/bash
# filename: void_dirs_awk.sh
# author: skypp
# description: list void directories of specified directory and its sub directories
# usage: sh ./void_dirs_awk.sh [DIRECTORY]

du $1 | grep 0 | awk '{system("[[ -z $(ls " $2 ") ]]&&echo "$2)}'

BOoRFGOnZ 发表于 2006-10-23 11:56:02

:mrgreen:

hnlotus 发表于 2006-10-28 17:27:39

du /root|awk ' ($1==4) {print $2}'

du $1|awk ' ($1==4) {print $2}'

这样不知怎么样啊!
那个grep 后面不应是0吧!应是4吧!

SKyPP 发表于 2006-11-12 10:58:36

不好意思公司放长假,才回来呵呵 :mrgreen:
楼上用的是什么Linux啊,我在Cygwin下和SuSe 9.3 X64下查看空目录大小都是0K,不过在RHEL4 AS下看空目录大小是8K
大家看情况使用0、4或者8,可能还有其他大小,哪位大虾指点指点

hnlotus 发表于 2006-11-16 16:42:25

在个新问题:
如在某目录中只有若干个字节为0的文件或目录,那此目录是否为空目录啊!
因此目录大小还是为0、4或者8.

SKyPP 发表于 2006-11-18 15:54:23

所以后边还得加点代码用ls探测下有没有空文件,有的话就不算空目录了,看我上面的小程序

SKyPP 发表于 2006-11-22 15:35:25

ls -ld /path/to/dir/**/*(/^F)

zsh :mrgreen:

一语惊醒梦中人,看来得好好学习下zsh了
页: [1]
查看完整版本: [原创]列出指定目录及其子目录里的所有空目录