MST

星途 面试题库

面试题:Bash函数递归实现目录遍历及文件处理

编写一个Bash函数,使用递归方式遍历指定目录及其所有子目录。对于每个普通文件,计算文件的行数并输出文件名和行数。对于每个目录,输出目录名及其中文件的总数。请给出函数定义及调用该函数传入起始目录的代码,并说明函数实现的关键思路。
28.5万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 定义递归函数
traverse_directory() {
    local dir=$1
    local file_count=0

    for item in "$dir"/*; do
        if [ -d "$item" ]; then
            echo "Directory: $item, File count: $(traverse_directory "$item")"
        elif [ -f "$item" ]; then
            local line_count=$(wc -l < "$item")
            echo "File: $item, Line count: $line_count"
            ((file_count++))
        fi
    done

    echo $file_count
}

# 调用函数,传入起始目录
traverse_directory /path/to/your/directory

关键思路

  1. 参数接收:函数traverse_directory接收一个目录路径作为参数。
  2. 循环遍历:使用for循环遍历传入目录中的所有项目。
  3. 判断项目类型:通过[ -d "$item" ]判断是否为目录,若是则递归调用函数处理该子目录,并输出目录名及其中文件总数;通过[ -f "$item" ]判断是否为普通文件,若是则使用wc -l计算行数并输出文件名和行数。
  4. 文件计数:在处理文件时,对文件数量进行计数,当处理完一个目录下所有内容后返回该目录下的文件总数。