Я использую grep из Gnuwin32 на Windows.
Выполнение:
grep -r INSERT *.sql
Урожайность:
grep: *.sql: Invalid argument
Есть идеи почему?
Потому что нет файла * .sql.
Согласно инструкции Grep:
-r с grep - это рекурсивный поиск в каталоге, поэтому для его использования вы указываете начальный каталог, а не маску файла.
например:
grep -r INSERT . будет просматривать все файлы для INSERT, начиная с текущего каталога (.) и рекурсивно прорабатывая подпапки.
Чтобы указать рекурсивную проверку папок и указать подстановочный знак для ограничения поиска, вы можете использовать параметр --include :
grep -r --include "*.sql" INSERT .
Подобный вопрос / информация о StackOverflow: Как мне выполнить рекурсивный поиск?
grep - отличный инструмент с некоторыми интересными параметрами. Однако, как говорит его название (г lobally поиск р е XPression Регулярная и р RINT) она предназначена для согласования вещей. Если вы хотите найти файлы, используйте find .
В этом случае, похоже, вы хотите найти текст INSERT в файлах, которые находятся в этом дереве.
Для этого вам нужно сделать что-то вроде:
find -name "*.sql" grep -h INSERT {} \;
find -name "*.sql" найдет все эти файлы, а затем grep -h напечатает те, в которых есть текст INSERT .
Почему ваш подход не работает?
Потому что, говоря grep -r ... *.sql , bash пытается раскрыть этот *.sql перед выполнением команды. Но ничто не соответствует *.sql в вашем каталоге, поэтому он не может работать.
Вы можете использовать параметр --include с регулярным выражением, но, по моему опыту, он довольно хрупкий.