📌  相关文章
📜  bash 计数目录中的文件递归匹配attern - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:29:35.819000             🧑  作者: Mango

Bash 计数目录中的文件递归匹配 pattern

如果你需要统计一个目录中所有文件中某种 pattern 的出现次数,可以使用 Bash 编写一个简单的脚本来实现。

思路
  1. 遍历目录中的所有文件;
  2. 判断文件是否是文本文件,如果是,则使用 grep 命令查找 pattern 并统计次数;
  3. 输出结果。
代码
#!/bin/bash

# 目录路径
dir_path="/path/to/directory"
# 匹配的 pattern
pattern="example"

# 统计总次数
count=0

# 遍历目录中的所有文件
for file in "$dir_path"/*; do
    # 判断文件是否是文本文件
    if [ -f "$file" ] && [ "$(file -b --mime-type "$file")" == "text/plain" ]; then
        # 使用 grep 查找 pattern 并统计次数
        num=$(grep -c "$pattern" "$file")
        if (( num > 0 )); then
            # 输出文件名和次数
            echo "$file: $num"
            # 累加总次数
            count=$((count + num))
        fi
    fi
done

# 输出总次数
echo "Total count: $count"
解析
  1. 定义目录路径和匹配的 pattern,可以根据实际情况修改;
  2. 使用 for 循环遍历目录中的所有文件,"$dir_path"/* 表示路径下的所有文件(不包括子目录),如果想要包括子目录中的文件,可以使用 "$dir_path"/**/*
  3. 判断文件是否是文本文件,如果是,使用 grep -c 命令查找 pattern 并统计次数,-c 表示只输出匹配行的计数;
  4. 如果次数大于 0,则输出文件名和次数,并累加总次数;
  5. 循环结束后输出总次数。
使用

将以上代码保存为一个脚本文件(例如 count.sh),然后在终端中执行:

$ chmod +x count.sh
$ ./count.sh
总结

以上代码只是一个简单的实现,可以根据实际需求进行修改和扩展。这里介绍的是 Bash 的一些基本语法和命令,如果想要了解更多关于 Bash 的知识,可以参考 Bash 脚本教程