回显/打印目录中的文件,回显文件大小并回显文件数量

回显/打印目录中的文件,回显文件大小并回显文件数量

请帮忙。我是一名学生,在网上发现了这个问题,尝试练习和学习。

我正在创建一个程序,它将回显给定目录中的每个条目。如果目录中的条目是文件,它将显示其大小。如果条目是一个目录,它将显示该目录中有多少项目。我下面的程序将回显给定目录中的文件。我的问题是如何回显文件的大小以及回显目录中的项目数。我的程序如下

谢谢你!

#! /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

相关内容