Создайте файл для каждого пользовательского каталога и добавьте вывод Grep к каждому пользовательскому файлу - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно найти строку регулярного выражения в нескольких файлах в нескольких пользовательских каталогах и подкаталогах.Я использовал команду grep для поиска фактических данных, но вручную запускал их внутри каждой пользовательской директории и рекурсивно grep'ing для строки.Я хотел бы начать с корневого каталога и создать небольшой скрипт для каждого каталога пользователя и записать вывод команды grep для этого пользователя в текстовый файл.Мне не повезло, что я сам все понял, используя цикл 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.

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете попробовать следующий рекурсивный скрипт. Он 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...