【问题标题】:Create A File For Each User Directory and Append Grep Output To Each User File为每个用户目录创建一个文件并将 Grep 输出附加到每个用户文件
【发布时间】:2019-06-06 13:53:40
【问题描述】:

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

For 循环:我真的不知道如何或在哪里放置 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 集成到循环中?
  • 请分享您的for loop 的样子
  • 见上面我的编辑添加for循环@PS。
  • 见上面我的编辑添加for循环@danlor

标签: bash shell scripting grep directory-structure


【解决方案1】:

您可以尝试以下递归脚本。 它只对每个目录进行一次 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) - ${1}..."
cd "$1"
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"

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多