- 论坛徽章:
- 0
|
常用脚本命令集
如何列出目录树
代码:
下面的短小的shell程序可以列出目录树, 充分利用了sed强大的模式匹配能力.
目录树形式如下:
.
`----shellp
`----updates
`----wu-ftpd-2.4
| `----doc
| | `----examples
| `----src
| | `----config
| | `----makefiles
| `----support
| | `----makefiles
| | `----man
| `----util
脚本如下:
#!/bin/sh
# dtree: Usage: dtree [any directory]
dir=${1:-.}
(cd $dir; pwd)
find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"
终于在Redhat 9.0下完成了这个shell,因为进入学习Linux不到一周,太费尽了,有点感想和总结,提出来大家批评指正.
1,变量dir是命令,改为dir1
2.提供一个sed的中文学习网址:
http://www-900.ibm.com/developerWorks/cn/linux/shell/sed/sed-1/index.shtml
http://www-900.ibm.com/developerWorks/cn/linux/shell/sed/sed-2/index.shtml
http://www-900.ibm.com/developerWorks/cn/linux/shell/sed/sed-3/index.shtml
3.完成后的代码如下:
#!/bin/sh
# dtree: Usage: dtree [any directory]
dir1=${1:-.}
(cd $dir1;pwd)
find $dir1 -type d -print | sort -f | sed -e"s,[^/]*/\([^/]*\)$,'--\1," -e 's,[^/]*/, |,g'
4.对sed命令的解释:
-e"s,[^/]*/\([^/]*\)$,'--\1,"
解释如下:
s表示替换;
s后的逗号表示分割,一般使用/来作为分割符号,,但是由于/表示路径,所以使用逗号;
[^/]*/\([^/]*\)$表示
第一个不是字符/([^/],
中间没有字符/(*),但是以字符/结束的最后的字符串,
并使用标记以方便使用\([^/]*\)$;
但是只替换第一个出现的字符串,没有出现g
'--\1 表示在标记1的地方进行替换
-e 's,[^/]*/, |,g'
解释如下:
[^/]*/ 表示第一个不是/([^/],中间没有/(*),但是以/结束的最后的字符串,
g 表示任何地方出现匹配的字符串都替换;
5.感觉Shell有点类似DOS下的bat文件.不知道对不对
6.为什么在redhat 9.0 下 统计文件有问题,必须去掉*
ls -l | grep "^-" |wc -l
ls -l | grep "^d" | wc -l
我想请问是这条命令本身就是错误还是由于版本的问题,类似当时的MSDOS 和PC DOS的问题,有些命令刚好相反.
请高手指正. |
|