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





