为每个用户目录创建一个文件并将 Grep 输出附加到每个用户文件

Create A File For Each User Directory and Append Grep Output To Each User File

我需要在多个用户目录和子目录下的多个文件中找到一个正则表达式字符串。我使用了 grep 命令来查找实际数据,但是在每个用户目录中手动 运行 它并递归地 grep'ing 字符串。我想从根目录开始,让一个小脚本为每个用户目录创建一个文件,并将该用户的 grep 输出记录在一个文本文件中。我没有运气用 for 循环自己解决这个问题。

For Loop:我真的不知道如何或在哪里放置 grep 命令。

#!/bin/bash

IFS=$'\n'

for dir in $(find /Users/brian/Documents/ -maxdepth 1 -path . -type d);
do
    for subdir in $(find "$dir" -mindepth 2 -type d);
    do
        base_dir=$(basename $dir)
        base_subdir=$(basename $subdir)

        touch "$base_dir"/"$base_subdir"/"$base_dir"_"$base_subdir".txt
    done
done
grep -irnE '<img [^>]*src=\"?http:' /path/to/user/ -s > /path/to/output.txt &

我对 grep 的预期结果工作得很好,但我真的不知道如何将 grep 集成到 for 循环中。

您可以试试下面的递归脚本。 它只对每个目录进行一次 grep,然后收集子目录的 grep 结果以在当前目录中传播它们。 确保脚本的名称与第 14 行中的调用匹配,并且可以在路径变量中找到它。

#!/bin/bash

results_file=my_grep_results.txt
files_to_search="*.srt"
pattern='[Tt]ime'

OIFS="%IFS"
IFS=$'\n'

echo "scanning $(pwd) - ..."
cd ""
for subdir_to_search in $(find -maxdepth 1 -type d) ; do
    if [ "${subdir_to_search}" != "." ] ; then
        grep_recursive.sh "${subdir_to_search}"
        cat "${subdir_to_search}/${results_file}" >> "${results_file}"
    fi
done
grep "${pattern}" ${files_to_search} >> "${results_file}" 2> /dev/null


IFS="$OIFS"