一、获取目录下的文件/目录个数
命令:ls -l | grep "^-" | wc -l 获取目录下的文件个数,不包含子目录
问题:ls -lR|grep "^-"|wc -l 这个命令可以查看目录下文件的个数,包含子目录。但执行时报"无效的多字节字符"
经过试验是中文编码导致出现问题,但不知如何解决?
若要获取目录个数,使用grep "^d" 即可
1.1 Find命令简介
链接: https://www.cnblogs.com/mictms/p/5191449.html
Find命令主要用于目标的搜索,尽量做到少使用,因为find会消耗大量的系统资源。
使用该命令时,需要避开服务器运行高峰期,最好在指定的小范围内进行搜索,不要轻易使用全盘搜索。
Find命令常用的参数有以下:
-name 根据名称进行匹配 "*":表示通配符、"?":表示匹配一个字符
-size 根据文件大小进行匹配 "+":表示大于、"-":表示小于 1个数据块=512字节=0.5K
-user/-group 根据所有者/组进行匹配
-type 根据文件类型进行匹配 "f":表示文件、"d":表示目录、"l"表示软件链接、"h":表示硬链接
-inum 根据文件i节点进行匹配 ls -i :显示文件的i节点号
-amin 根据访问时间进行匹配 "+":表示超过指定时间以外,"-":表示在指定时间以内
-cmin 根据文件属性改变时间进行匹配
-mmin 根据文件内容改变时间进行匹配
-a 根据多个条件进行匹配
-o 根据多个条件之一进行匹配
-exec 对搜索结果进行操作,不询问
-ok 对搜索结果进行操作,需要询问
-exec/-ok 命令 {} \;
[root@localhost home]# find /etc/ -name init* -a -type f -exec ls -lh {} \;
-rw-r--r--. 1 root root 30 Mar 6 2015 /etc/selinux/targeted/contexts/initrc_context
-rw-r--r--. 1 root root 28K Mar 6 2015 /etc/selinux/targeted/modules/active/modules/init.pp
-rw-r--r--. 1 root root 511 Mar 6 2015 /etc/inittab
-rw-r--r--. 1 root root 798 Mar 6 2015 /etc/sysconfig/init
-rwxr-xr-x. 1 root root 4.6K Jan 15 2015 /etc/sysconfig/network-scripts/init.ipv6-global
二、获取目录下所有的文件名字
#!bin/bash
#get all filename in specified path
path=$1
files=$(ls $path)
for filename in $files
do
echo $filename >> filename.txt
done
一个简单的shell脚本,将该目录下的所有文件名及目录名称写入到filename.txt。
注意:不去统计子目录是否存在文件,filename.txt文件本身不会进行统计
三、使用python统计文件行数
count = 0
for index, line in enumerate(open(filepath,'r')):
count += 1
print count
也有说这样写:
方法一:
"对于文件内容比较多,采用enumerate获取文件行数"
count = 0
for index, line in enumerate(f):
count += 1
print(count)
方法二:
"对于文件内容比较少,采用该方法获取文件行数"
with open("data/aggregation.txt", 'r') as f:
print(len(f.readlines()))
---------------------
作者:sxf_0123
来源:CSDN
原文:https://blog.csdn.net/sxf_123456/article/details/85847175
版权声明:本文为博主原创文章,转载请附上博文链接!
都试验过后再来更新文章。
四、Python的enumerate()函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
Python 2.3. 以上版本可用,2.6 添加 start 参数。
以下是 enumerate() 方法的语法: enumerate(sequence, [start=0])
- sequence -- 一个序列、迭代器或其他支持迭代对象。
- start -- 下标起始位置。
返回 enumerate(枚举) 对象。
https://www.runoob.com/python/python-func-enumerate.html
五、WC命令简介
Linux - wc统计文件行数、单词数或字节数
https://www.cnblogs.com/hrhguanli/p/5072832.html
5.1wc简单介绍
wc命令用来打印文件的文本行数、单词数、字节数等(print the number of newlines, words, and bytes in files)。在Windows的Word中有个“字数统计”的工具,能够帮我们把选中范围的字数、字符数统计出来。Linux下的wc命令能够实现这个 功能。使用vi打开文件的时候。底下的信息也会显示行数和字节数。
5.2 经常使用參数
格式:wc -l <file>
打印指定文件的文本行数。(l=小写L)
下面參数可组合使用。
參数:-c, --bytes
打印字节数(print the byte counts)
參数:-m, --chars
打印字符数(print the character counts)
參数:-l, --lines
打印行数(print the newline counts)
參数:-L, --max-line-length
打印最长行的长度(print the length of the longest line)
參数:-w, --words
打印单词数(print the word counts)
5.3 使用演示样例
演示样例 一
[root@jfht ~]# wc /etc/passwd
46 66 2027 /etc/passwd
行数 单词数 字节数 文件名称
[root@jfht ~]# wc -l /etc/passwd
46 /etc/passwd
[root@jfht ~]# wc -cmlwL /etc/passwd
46 66 2027 2027 74 /etc/passwd
[root@jfht ~]# wc -cmlLw /etc/passwd
46 66 2027 2027 74 /etc/passwd
[root@jfht ~]# wc -wcmlL /etc/passwd
46 66 2027 2027 74 /etc/passwd
[root@jfht ~]#
问题来了:从上面的命令行运行结果来看,wc的输出数据的顺序与的几个參数的顺序好像没有关系?!
演示样例二 用wc命令怎么做到仅仅打印统计数字不打印文件名称
使用管道线,这在编写shell脚本时特别实用。
[root@jfht ~]# wc -l /etc/passwd
46 /etc/passwd
[root@jfht ~]# cat /etc/passwd | wc -l
46
[root@jfht ~]#
演示样例三 中文编码的问题
运行环境是中文编码的。
[root@jfht ~]# echo $LANG
zh_CN.UTF-8
中文编码文件ehr_object.gv,UTF8编码的文件ehr_object_utf8.gv。
[root@jfht ~]# file ehr_object.gv ehr_object_utf8.gv
ehr_object.gv: ISO-8859 text
ehr_object_utf8.gv: UTF-8 Unicode text
[root@jfht ~]#
[root@jfht ~]# wc ehr_object.gv ehr_object_utf8.gv
11 105 830 ehr_object.gv
wc: ehr_object_utf8.gv:4: 无效或不完整的多字节字符或宽字符
11 105 866 ehr_object_utf8.gv
22 210 1696 总计
[root@jfht ~]#
演示样例四 中文单词数的计算
[root@jfht ~]# cat test1
你好中国
Linux
[root@jfht ~]# wc test1
2 2 19 test1
行数 单词数 字节数 文件名称