Centos7计算目录(包括它们所有的子目录)中总体的文件数量和目录数量
问
- Centos7计算包括 /www/wwwroot/EXE 和 /www/wwwroot/H5
- ①这两个目录(包括它们所有的子目录)中总体的文件数量和目录数量
- ②本身在内的每个目录(以及它们的子目录)中的文件和目录数量,并且分别显示每个目录(包括顶级目录)的统计结果,
- ③先文件、目录、路径这样显示排版要整齐,数字要右对齐,中文显示
答
为了满足您的需求,以下是一个适用于 CentOS 7 的 Bash 脚本。该脚本将计算包括 /www/wwwroot/EXE
和 /www/wwwroot/H5
这两个目录(及其所有子目录)在内的文件和目录数量,并按照您要求的格式显示结果。
- #!/bin/bash
-
- # 定义要检查的顶级目录数组
- TOP_DIRS=("/www/wwwroot/EXE" "/www/wwwroot/H5")
-
- # 初始化总体计数
- TOTAL_FILES=0
- TOTAL_DIRS=0
-
- # 定义一个函数来计算并显示指定目录的统计结果
- count_files_and_dirs() {
- local dir=$1
- local files=$(find "$dir" -type f | wc -l)
- local dirs=$(find "$dir" -type d | wc -l)
- # 减去当前目录(.),因为它不是一个子目录
- dirs=$((dirs - 1))
- # 使用 printf 格式化输出,确保数字右对齐,路径左对齐
- printf "%10d %10d %-50s\n" "$files" "$dirs" "$dir")
- }
-
- # 遍历每个顶级目录及其子目录
- for top_dir in "${TOP_DIRS[@]}"; do
- echo "处理顶级目录: $top_dir"
- echo " 文件数 目录数 路径"
- echo "------------------------------------------------"
- # 显示顶级目录的统计结果
- count_files_and_dirs "$top_dir"
- # 累加顶级目录的文件和目录数量到总体计数
- TOTAL_FILES=$((TOTAL_FILES + $(find "$top_dir" -type f | wc -l)))
- TOTAL_DIRS=$((TOTAL_DIRS + $(find "$top_dir" -type d | wc -l)))
- # 遍历并显示每个子目录的统计结果
- find "$top_dir" -mindepth 1 -type d | while read subdir; do
- count_files_and_dirs "$subdir"
- done
- echo "" # 添加空行以分隔不同顶级目录的输出
- done
-
- # 注意:上面的累加方法会重复计算顶级目录,所以需要减去多算的部分
- # 顶级目录的数量只应该计算一次,因此我们从总数中减去每个顶级目录的重复计数
- for top_dir in "${TOP_DIRS[@]}"; do
- TOTAL_DIRS=$((TOTAL_DIRS - 1))
- done
-
- # 显示总体的统计结果
- echo "总体统计结果:"
- echo " 文件数 目录数"
- echo "---------------------"
- printf "%10d %10d\n" "$TOTAL_FILES" "$TOTAL_DIRS"
将上述脚本保存为一个 .sh
文件(例如 count_files_dirs.sh
),然后给予执行权限并运行:
- chmod +x count_files_dirs.sh
- ./count_files_dirs.sh
脚本说明:
定义了
TOP_DIRS
数组来存储要检查的顶级目录路径。使用
count_files_and_dirs
函数来计算并显示每个目录(包括子目录)的文件和目录数量,同时确保输出格式正确。在
for
循环中遍历每个顶级目录,调用count_files_and_dirs
函数显示统计结果,并累加文件和目录数量到总体计数中。注意,在计算子目录数量时,我们减去了顶级目录本身,因为顶级目录会在总体计数中单独计算。
最后显示总体的文件和目录数量。
这个脚本会按照您要求的格式输出每个目录(包括顶级目录和子目录)的统计结果,数字右对齐,路径左对齐,并且先显示文件数,再显示目录数,最后是路径。