Есть ли способ сказать, ack
чтобы искать только текст в текущей папке? (или указать max-depth
уровень?) А с grep
?
Есть ли способ сказать, ack
чтобы искать только текст в текущей папке? (или указать max-depth
уровень?) А с grep
?
Ответы:
Использовать -n
для no-recurse
:
$ ack -n foo
grep
не является рекурсивным по умолчанию, и вы должны использовать -r
флаг, только если вы хотите рекурсивный поиск.
Вы можете искать текущий каталог grep
следующим образом:
$ grep -- foo *
Вы можете найти пару с аргументом -exec. пример:
find . -maxdepth 1 -exec grep foo {} \;
Это можно масштабировать, т.е. -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
), в то время как GNU grep
не будет пытаться читать каталоги с помощью -r
(он повторяется на них). Вы можете добавить -d skip
к grep
(предполагая , что GNU Grep) или лучше добавить ! -type d
к find
или даже лучше -type f
(или -xtype f
предполагая GNU find
) , как вы , вероятно , не хотите grep
читать нерегулярные файлы.
grep -Hin
с этим подходом, чтобы я мог видеть имя файла и строку, в которой находится вхождение.
-n
как вообще не использовать.