• 统计目录下的文件数目及类型


    1.这段shell可以实现查看当前目录下有多少个文件夹,有多少个文件,其中可读、可写、可执行的分别是多少个。

    #!/bin/bash
    dir=`ls -l | grep ^d | wc -l`
    file=`ls -l | grep ^- | wc -l`
    filew=`ls -l | grep w | wc -l`
    filer=`ls -l | grep r | wc -l`
    filex1=`ls -lF | grep "\*" | wc -l`
    filex2=`ls -l | grep ^- |awk 'substr($1,4,1)=="x" || substr($1,4,1)=="s"'|wc -l`
    echo "There are $dir directoty in `pwd`."
    echo "There are $file files in `pwd`."
    echo "There are $filew files are writeabled."
    echo "There are $filer files are readabled."
    echo "There are $filex1 files can be excuted."
    echo "There are $filex2 files can be excuted."
    echo "$0"

    其中查找当前目录下的可执行文件的命令有两个变量filex1和filex2。

    用filex1时有缺陷,如果有文件名是 *结尾的,可能出现问题。(另外使用ls -F命令时,如果文件是目录,在文件名后面放置一个 /,如果文件可执行,则放置一个 *,如果文件为套接字,则放置一个 =,如果为 FIFO,则放置一个 |符号,如果是符号链接,则放置一个 @,所以使用这条命令式,文件结尾有符号*。)

    用下面这条命令没有问题

    ls -l | grep ^- | awk 'substr($1,4,1)=="x"||substr($1,4,1)=="s" {print $NF}'


    我有一个疑问,用ls -l命令时显示如下:
    -rwxrwxr--. 1  478 Jan 26 12:30 count.sh

    查找可读、可写文件时可以直接用grep w或者grep r,但用grep x查找可执行文件时,和ls -l的结果是一样的,相当于grep x没有起作用,不明白为什么这样设计。

    个人猜测:在Linux系统下,一个文件至少有两部分,文件正文和文件的属性(比如可读、可写)。文件在硬盘存储时,还是以r、w的方式标识文件的可读、可写的属性,而可执行属性的标识不是x,是另外一种方式。也就是说,文件的属性也是以字符串的形式存储在硬盘中,当我们用grep w检索可写的文件时,和代表属性的字符串进行对比,如果发现了w字符,就显示相关文件;而存储在中的每个文件中都有x这个字符,所以用grep x查找可执行文件时,和ls -l的结果一样。

    而且,这种查找可读/可写文件时有弊端,比如说当一个文件命名为keduw,文件的权限为可读,不可写,用grep w 查询可写文件时,这个文件也会显示出来,因为它的名字中包含w这个字符。

    2.实现同样的功能还有一种写法,如下:

    #!/bin/bash
    f=0
    d=0
    x=0
    for files in *
    do
    if [ -f "$files" ]
    then
    f=`expr $f + 1`
    if [ -x "$files" ]
    then
    x=`expr $x + 1`
    fi
    fi
    done
    for directory in *
    do
    if [ -d "$directory" ]
    then d=`expr $d + 1`
    fi
    done
    echo "There are $d directorys in `pwd`."
    echo "There are $f files in `pwd`,and $x of them can be excuted."
    
    注意是否要添加空格,if [ -f "$files"  ]之间要加空格,赋值之间不能加空格,f=0.还有可写的文件一定要有可读的属性,不然无法编辑。

    要判断是否可读/可写,只需要再添加两个if语句即可。


  • 相关阅读:
    在Linux下OpenCV的下载和编译
    安装GDB-ImageWatch ,在QT中查看图像
    linux下对qt编写的程序进行部署
    GOQTTemplate简单介绍
    寻找激光的交叉点
    基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)
    图像处理工程师的要求研究
    如何将QT的pro图标修改的更显著一些
    快速阅读《QT5.9 c++开发指南》2
    小米盒子连接老式电脑显示器(VGA接口)
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218688.html
Copyright © 2020-2023  润新知