Ответ 1
grep $PATTERN *
было бы достаточно. По умолчанию grep будет пропускать все подкаталоги. Однако, если вы хотите grep через них, grep -r $PATTERN *
имеет значение.
Работа с xenserver, и я хочу выполнить команду для каждого файла, находящегося в каталоге, grepping некоторые вещи из вывода команды и добавления ее в файл.
Я понимаю, какую команду я хочу использовать, и как нужно вывести строки (строки) по мере необходимости.
Но я не понимаю, как это сделать, чтобы выполнить эту команду для каждого файла, перейдя к следующему, пока не будет найдено больше файлов.
grep $PATTERN *
было бы достаточно. По умолчанию grep будет пропускать все подкаталоги. Однако, если вы хотите grep через них, grep -r $PATTERN *
имеет значение.
В Linux я обычно использую эту команду для рекурсивного grep для определенного текста в каталоге
grep -rni "string" *
где
r = рекурсивный i.e, поиск подкаталогов в текущем каталоге
n = для печати номеров строк в stdout
i = нечувствительный к регистру поиск
Используйте find. Серьезно, это лучший способ, потому что тогда вы действительно можете увидеть, на каких файлах он работает:
find . -name "*.sql" -exec grep -H "slow" {} \;
Обратите внимание, что -H является специфичным для Mac, он показывает имя файла в результатах.
Если вы хотите выполнять несколько команд, вы можете использовать:
for I in `ls *.sql`
do
grep "foo" $I >> foo.log
grep "bar" $I >> bar.log
done