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
函数显示统计结果,并累加文件和目录数量到总体计数中。注意,在计算子目录数量时,我们减去了顶级目录本身,因为顶级目录会在总体计数中单独计算。
最后显示总体的文件和目录数量。
这个脚本会按照您要求的格式输出每个目录(包括顶级目录和子目录)的统计结果,数字右对齐,路径左对齐,并且先显示文件数,再显示目录数,最后是路径。