Чи є спосіб сказати 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
) не є переносним / стандартним синтаксисом (лише 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
щоб взагалі не повторюватися.