Стефан, мой ответ ( -maxdepth 1) был масштабируемым. Например -maxdepth 2. Я не знаю, как описать редактирование, которое вы сделали как таковое.
Дэвид Уилкинс
он не достигнет @stephane, если вы не используете @.
Брайам
4
Да, извините, я согласен, что мое редактирование было слишком навязчивым. Вы все еще можете уточнить, что -maxdepththis ( ) не является переносимым / стандартным синтаксисом (только GNU и некоторые BSD). Кроме того, здесь нет смысла использовать \;(запускать по одному grepна файл). Используйте grep -H foo {} +(в зависимости от GNU) или grep foo /dev/null {} +(стандартный), чтобы убедиться, что имя файла всегда печатается. Стандартный эквивалент был -maxdepth 2быfind . -path './*/*' -type d -prune -o -type f -exec ...
Стефан Шазелас
2
Также обратите внимание, что вы будете выдавать сообщения об ошибках для каталогов (в том числе, .если вы этого не сделаете -mindepth 1), в то время как GNU grepне будет пытаться читать каталоги с помощью -r(он повторяется на них). Вы можете добавить -d skipк grep(предполагая , что GNU Grep) или лучше добавить ! -type dк findили даже лучше -type f(или -xtype fпредполагая GNU find) , как вы , вероятно , не хотите grepчитать нерегулярные файлы.
Стефан Шазелас
4
Я склонен использовать grep -Hinс этим подходом, чтобы я мог видеть имя файла и строку, в которой находится вхождение.
-n
как вообще не использовать.Ответы:
Использовать
-n
дляno-recurse
:grep
не является рекурсивным по умолчанию, и вы должны использовать-r
флаг, только если вы хотите рекурсивный поиск.Вы можете искать текущий каталог
grep
следующим образом:источник
Вы можете найти пару с аргументом -exec. пример:
Это можно масштабировать, т.е.
-maxdepth 2
источник
-maxdepth 1
) был масштабируемым. Например-maxdepth 2
. Я не знаю, как описать редактирование, которое вы сделали как таковое.-maxdepth
this ( ) не является переносимым / стандартным синтаксисом (только GNU и некоторые BSD). Кроме того, здесь нет смысла использовать\;
(запускать по одномуgrep
на файл). Используйтеgrep -H foo {} +
(в зависимости от GNU) илиgrep foo /dev/null {} +
(стандартный), чтобы убедиться, что имя файла всегда печатается. Стандартный эквивалент был-maxdepth 2
быfind . -path './*/*' -type d -prune -o -type f -exec ...
.
если вы этого не сделаете-mindepth 1
), в то время как GNUgrep
не будет пытаться читать каталоги с помощью-r
(он повторяется на них). Вы можете добавить-d skip
кgrep
(предполагая , что GNU Grep) или лучше добавить! -type d
кfind
или даже лучше-type f
(или-xtype f
предполагая GNUfind
) , как вы , вероятно , не хотитеgrep
читать нерегулярные файлы.grep -Hin
с этим подходом, чтобы я мог видеть имя файла и строку, в которой находится вхождение.