Linux 学习-Shell 遍历目录和子目录所有文件

题目如下:

  1. 写一个脚本程序,它带一个参数,若该参数是一个普通文件,则把该文件的索引结点号、大小以及最近一次修改时间等详细信息输出来;如果该参数是一个目录,则将该目录(包含子目录)下的所有普通文件的文件名以及上述文件信息输出来。
    要求:
    (1)如果参数个数大于1,或者参数既不是普通文件也不是目录文件,则提示出错
    (2)给出程序在两种不同类型参数(普通文件/目录)下的运行结果
#! /bin/bash

findFile(){
    
    file="$1"
    for element in `ls $1`
    do  
        dir_or_file=$file"/"$element
        if [ -d $dir_or_file ]
            then
            findFile $dir_or_file
        else
            if [ -f $dir_or_file ]
            then
            set $(ls -il $dir_or_file)
            inode=$1
            size=$6
            time=$7"-"$8"-"$9
            echo "Name        Inode         Time        Size"
            echo "$dir_or_file     $inode     $time     $size"
            fi
        fi
    done
}

filename="$1"
if [ "$#" -gt 1 ]
    then
    echo "input error. only one argument!!"
elif [ -f  "$filename" ]
    then
    echo "查询输入参数确认是文件,信息如下"
    set $(ls -il $filename)
    inode=$1
    size=$6
    time=$7"-"$8"-"$9
    echo "Name         Inode         Time       Size"
    echo "$filename      $inode      $time      $size"
elif [ -d "$filename" ]
    then
    echo "查询查询输入确认是目录,此目录下所有文件(包含子目录)信息如下:"
    findFile $filename
else
    echo "输入参数既不是普通文件也不是目录文件!!"
fi

脚本运行结果如下:
1)当输入参数大于1


1.png

2)当输入参数为目录


2.png

3)当输入参数为文件


3.png

4)当输入参数不存在对应目录和文件


4.png

扩展

以下命令均不包含".",".."目录,以及"."开头的隐藏文件,如需包含,ll 需要加上 -a参数

当前目录下文件个数,不包含子目录

ll |grep "^-"|wc -l

当前目录下目录个数,不包含子目录

ll |grep "^d"|wc -l

当前目录下文件个数,包含子目录

ll -R|grep "^-"|wc -l

当前目录下目录个数,包含子目录

ll -R|grep "^d"|wc -l

你可能感兴趣的:(Linux 学习-Shell 遍历目录和子目录所有文件)