1、在ubuntu中编写一个find程序用于访问操作系统中某个目录下的所有文件,递归打印出所有文件的名称、类型(目录、普通文件、链接文件等)、文件大小,程序运行以传递运行命令参数的形式去设置需要遍历的目录,操作参考如下,需要用到<unistd.h>中的getopt函数: 2、能够按照文件大小进行分类展示,比如按照小于10KB为一组显示、10KB~100KB为一组显示等大小分类展示。
时间: 2024-03-08 08:50:51 浏览: 122
好的,这是一个比较有挑战性的问题,下面我将给出一个可能的实现方式。
在 Ubuntu 中,系统自带了一个 `find` 命令,可以用于查找文件。我们可以基于这个命令来编写一个类似的程序,实现遍历指定目录下的所有文件,并递归地打印出文件的名称、类型和大小。
以下是一个可能的实现方式:
```bash
#!/bin/bash
dir_path="."
size_group=0
# 处理命令行参数
while getopts "d:s:" opt
do
case $opt in
d)
dir_path=$OPTARG;;
s)
size_group=$OPTARG;;
?)
echo "Usage: $0 [-d directory] [-s size_group]"
exit 1;;
esac
done
# 遍历目录
find "$dir_path" -print0 | while IFS= read -r -d $'\0' file
do
# 获取文件信息
file_type=$(file -b "$file")
file_size=$(stat -c %s "$file")
# 打印文件信息
echo "File: $file, Type: $file_type, Size: $file_size bytes"
# 根据文件大小进行分类展示
if [ $size_group -gt 0 ]
then
if [ $file_size -lt $((size_group*1024)) ]
then
echo "Size Group: < $size_group KB"
elif [ $file_size -lt $((size_group*1024*10)) ]
then
echo "Size Group: $size_group ~ $((size_group*10)) KB"
else
echo "Size Group: > $((size_group*10)) KB"
fi
fi
done
```
在这个程序中,我们使用了 `find` 命令来遍历目录中的所有文件,使用 `file` 命令获取文件类型,使用 `stat` 命令获取文件大小。如果命令行参数中指定了 `-s` 参数,则根据文件大小进行分类展示。注意,这里的文件大小以字节为单位,而命令行参数中指定的大小是以 KB 为单位。
你可以将上面的代码保存到一个文件中,例如 `myfind.sh`,然后给这个文件添加执行权限:
```bash
chmod +x myfind.sh
```
你可以使用以下命令来运行程序:
```bash
./myfind.sh -d /path/to/directory -s 10
```
其中,`/path/to/directory` 是需要遍历的目录路径,`-s 10` 表示按照文件大小进行分类展示,每组大小为 10 KB。如果不需要分类展示,可以忽略 `-s` 参数。
阅读全文