Stephane, moja odpowiedź ( -maxdepth 1) była skalowalna. Na przykład -maxdepth 2. Nie wiem, jak opisać dokonaną przez ciebie edycję.
David Wilkins
nie osiągnie @stephane, jeśli nie użyjesz @.
Braiam
4
Tak, przepraszam, zgadzam się, że moja edycja była zbyt nachalna. Nadal możesz wyjaśnić, że ta ( -maxdepth) nie jest przenośną / standardową składnią (tylko GNU i niektóre BSD). Ponadto nie ma sensu używać \;tutaj (uruchom jeden grepna 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 2byłobyfind . -path './*/*' -type d -prune -o -type f -exec ...
Stéphane Chazelas
2
Zauważ też, że twoje dadzą komunikaty o błędach dla katalogów (w tym, .ponieważ nie dajesz tego -mindepth 1), podczas gdy GNU grepnie będzie próbowało czytać katalogów -r(to się na nich powtarza ). Może chcesz dodać -d skipdo grep(zakładając GNU grep) lub lepiej dodać ! -type ddo findlub nawet lepiej -type f(lub -xtype fzakładając GNU find) jak pewnie nie chce grepczytać non-zwykłe pliki.
Stéphane Chazelas
4
Zwykle używam grep -Hintego 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.Odpowiedzi:
Użyj
-n
dono-recurse
: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:źródło
Możesz połączyć find z argumentem -exec. przykład:
Można to skalować, tj
-maxdepth 2
źródło
-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 jedengrep
na plik). Użyjgrep -H foo {} +
(specyficzne dla GNU) lubgrep 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 GNUgrep
nie będzie próbowało czytać katalogów-r
(to się na nich powtarza ). Może chcesz dodać-d skip
dogrep
(zakładając GNU grep) lub lepiej dodać! -type d
dofind
lub nawet lepiej-type f
(lub-xtype f
zakładając GNUfind
) jak pewnie nie chcegrep
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.