Czy istnieje sposób, aby nakazać ack
wyszukiwanie tylko tekstu w bieżącym folderze? (lub podać max-depth
poziom?) Oraz za pomocą grep
?
Czy istnieje sposób, aby nakazać ack
wyszukiwanie tylko tekstu w bieżącym folderze? (lub podać max-depth
poziom?) Oraz za pomocą grep
?
Odpowiedzi:
Użyj -n
do no-recurse
:
$ ack -n foo
grep
domyślnie nie jest rekurencyjny i powinieneś używać -r
flagi tylko wtedy, gdy chcesz wyszukiwać rekurencyjnie.
Możesz przeszukać bieżący katalog grep
w następujący sposób:
$ grep -- foo *
Możesz połączyć find z argumentem -exec. przykład:
find . -maxdepth 1 -exec grep foo {} \;
Można to skalować, tj -maxdepth 2
-maxdepth 1
) była skalowalna. Na przykład -maxdepth 2
. Nie wiem, jak opisać dokonaną przez ciebie edycję.
-maxdepth
) nie jest przenośną / standardową składnią (tylko GNU i niektóre BSD). Ponadto nie ma sensu używać \;
tutaj (uruchom jeden grep
na plik). Użyj grep -H foo {} +
(specyficzne dla GNU) lub grep foo /dev/null {} +
(standardowe), aby upewnić się, że nazwa pliku jest zawsze drukowana. Standardowym odpowiednikiem -maxdepth 2
byłobyfind . -path './*/*' -type d -prune -o -type f -exec ...
.
ponieważ nie dajesz tego -mindepth 1
), podczas gdy GNU grep
nie będzie próbowało czytać katalogów -r
(to się na nich powtarza ). Może chcesz dodać -d skip
do grep
(zakładając GNU grep) lub lepiej dodać ! -type d
do find
lub nawet lepiej -type f
(lub -xtype f
zakładając GNU find
) jak pewnie nie chce grep
czytać non-zwykłe pliki.
grep -Hin
tego podejścia, dzięki czemu mogę zobaczyć nazwę pliku i linię, na której jest wystąpienie.
-n
że w ogóle się nie powtórzy.