请帮忙。我是一名学生,在网上发现了这个问题,尝试练习和学习。
我正在创建一个程序,它将回显给定目录中的每个条目。如果目录中的条目是文件,它将显示其大小。如果条目是一个目录,它将显示该目录中有多少项目。我下面的程序将回显给定目录中的文件。我的问题是如何回显文件的大小以及回显目录中的项目数。我的程序如下
谢谢你!
#! /bin/bash
# Files Directory
read -p "Enter a Directory or File: " entry
target="$entry"
let count=0
for f in "$target"/*
do
echo $(basename $f)
let count=count+1
done
echo "Files in the Directory: $count"
exit 0
答案1
由于您正在学习,因此这里有一些针对您的问题的指导,而不是完整的脚本。
获取文件大小的方法不止一种;在 Linux 系统上,stat
公用事业是一个不错的选择,因为您可以直接向它询问字节:
bytes=$(stat -c %s -- "$f")
另一种选择是厕所公用设施:
bytes=$(wc -c < "$f")
请注意,您要重定向文件进入 wc
与直觉相反wc -c "$f"
,因为后一种形式也会输出文件名,而前者(因为它不知道文件名)只输出字节数。
要测试给定的文件是常规文件还是目录,通常的测试是:
if [ -d "$f" ]
then
echo It is a directory
else
echo It is not a directory
fi
要计算目录中(非隐藏)文件的数量,您有以下几种选择:
使用 POSIX 指定的
set
实用程序:set -- /path/to/dir/*; echo "$#"
使用数组(因为您标记了 bash):
files=( /path/to/dir/* ) echo "There are ${#files[@]} files in there"
这些将计算给定目录中“文件”(文件和目录)的数量。大多数 shell 中的默认行为是忽略.bashrc
扩展全局时的点文件(例如) *
;您可以通过运行shopt -s dotglob
或来使用 bash 进行调整shopt -u dotglob
,然后使用 进行检查shopt dotglob
。