1.遍历目录,查找其中所有文件,并统计每个文件的行数
定义一个函数detect,这是为了可以递归往子目录中操作
接着一个循环遍历`ls $1`的结果,$1是第一个输入参数,也即查找路径
在循环中,首先判断文件是否是目录文件,如果是,则递归进入里边,
否则用wc命令得到文件中行的数目,并用cut命令得到wc结果中的行数,最后把结果保存到/home/user/shell/reslt.txt里边就好啦。
最后调用下这个函数。
#!/bin/sh
function detect(){
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
detect $1"/"$file
else
wc -L $1"/"$file | cut -d' ' -f 1-2>> /home/user/shell/result.txt
fi
done
}
path="/home/user/"
detect $path
wc命令
wc即wordcount,可以统计文件的相关信息。
- -l选项统计行数
- -c统计字节数
- -w统计字数,字由空格,换行等区分
- -L,最长行的长度(字符个数,比如aaa长度为3)
因为它的输出是“num 文件名”的形式,比如
root@ubuntu:/home/user/shell# wc -l t.sh
15 t.sh
所以要得到15的话就要使用cut命令了
ls -l | wc -l 可以用来统计当前路径下文件总数
cut命令
- -b以字节为单位分割,注意的是wc里边是没有-b选项的哦
- -c以字符为单位分割,感觉和-b差不多啊,每一个字符都是用一个字节来存储的,像'\t'这样的也是嘛
- -d自定义分隔符,可以用空格,或者字符之类的
- -f与-d合作,指定显示分割区域的哪一部分,分割部分的序号从1开始
a x dd
bb x zz
ccc x dd
root@ubuntu:/home/user/shell# cut -d'x' -f2 ls
dd
zz
dd
root@ubuntu:/home/user/shell# cut -d'x' -f1,2 ls
a x dd
bb x zz
ccc x dd
root@ubuntu:/home/user/shell# cut -d' ' -f1-3 ls
a x dd
bb x zz
ccc x dd
-d后边紧跟' ',单引号里边填充自定义分隔符,上面实验了字符x和空格, -f后则跟数字,表示输出的区域
从里面可以发现,如果输出的区域是连续的两个区域,那么分割它们的分隔符在输出的时候也是会输出的哦!