LINUX.ORG.RU

Как сделать find + grep с перенаправлением вывода grep в отдельные файлы?


0

0

Хочется погрепать дерево директорий, так, чтобы вывод grep делался в отдельные log-файлы, по одному log-файлу на каждый найденный файл.

Пытаюсь так:

find *.sh -exec grep "echo" {} > {}.log \;

Но не выходит - просто создаётся один файл "{}.log".

А хочется, чтобы после выполнения команды рядом с каждым найденным файлом появился log-файл с отгрепанным содержимым.

Как сие сделать?

Можно, конечно, создать маленький скрипт "grep_log.sh" такого содержания

#!/bin/sh
grep $1 $2 > $2.log

и вызывать его так:

find *.sh -exec ./grep_log.sh "echo" {} \;

Но хочется как-то попроще...

anonymous

помоему не слишком сложно:

for file in `find ./`; do TEST=`grep "a" $file`; if [ "$TEST" != "" ]; then grep "echo" $file > `basename $file`-log; fi; done

ps (только сея магия не правильно откастуется, если имеются файлы с одинаковыми именами)

ale ★★
()
Ответ на: комментарий от ale

блин, баг. Вместо `find ./` лучше `find ./ -type f`

ale ★★
()

Можно так:

find -name \*.sh -exec bash -c "eval grep 'echo' {} > {}.log" \;

Laz ★★★★★
()

find -name '*.sh' | awk '{ printf "%s%s%s%s%s\n","grep echo ",$0," > ",$0,".log" }' | sh -s

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

> find ./ | while read $file; do ...; done

$ только убрать нужно

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.