题目如下:
写一个脚本程序,它带一个参数,若该参数是一个普通文件,则把该文件的索引结点号、大小以及最近一次修改时间等详细信息输出来;如果该参数是一个目录,则将该目录(包含子目录)下的所有普通文件的文件名以及上述文件信息输出来。
要求:
(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