Как выполнить операцию grep для всех файлов в каталоге

Работа с xenserver, и я хочу выполнить команду для каждого файла, находящегося в каталоге, grepping некоторые вещи из вывода команды и добавления ее в файл.

Я понимаю, какую команду я хочу использовать, и как нужно вывести строки (строки) по мере необходимости.

Но я не понимаю, как это сделать, чтобы выполнить эту команду для каждого файла, перейдя к следующему, пока не будет найдено больше файлов.

Ответ 1

grep $PATTERN * было бы достаточно. По умолчанию grep будет пропускать все подкаталоги. Однако, если вы хотите grep через них, grep -r $PATTERN * имеет значение.

Ответ 2

В Linux я обычно использую эту команду для рекурсивного grep для определенного текста в каталоге

grep -rni "string" *

где

r = рекурсивный i.e, поиск подкаталогов в текущем каталоге
n = для печати номеров строк в stdout
i = нечувствительный к регистру поиск

Ответ 3

Используйте find. Серьезно, это лучший способ, потому что тогда вы действительно можете увидеть, на каких файлах он работает:

find . -name "*.sql" -exec grep -H "slow" {} \;

Обратите внимание, что -H является специфичным для Mac, он показывает имя файла в результатах.

Ответ 4

Если вы хотите выполнять несколько команд, вы можете использовать:

for I in `ls *.sql`
do
    grep "foo" $I >> foo.log
    grep "bar" $I >> bar.log
done