关于文件操作的几种场景

一、获取目录下的文件/目录个数

命令: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

行数 单词数 字节数 文件名称 

发布了57 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/shafatutu/article/details/95221566