Stephane, minha resposta ( -maxdepth 1) foi escalável. Por exemplo -maxdepth 2. Não sei como descrever a edição que você fez como tal.
David Wilkins
não alcançará @stephane se você não usar o @.
Braiam
4
Sim, desculpe, concordo que minha edição foi muito intrusiva. Você ainda pode esclarecer que ( -maxdepth) não é uma sintaxe portátil / padrão (apenas GNU e alguns BSDs). Além disso, não faz sentido usar \;aqui (execute um greppor arquivo). Use grep -H foo {} +(específico do GNU) ou grep foo /dev/null {} +(padrão) para garantir que o nome do arquivo seja sempre impresso. O padrão equivalente -maxdepth 2seriafind . -path './*/*' -type d -prune -o -type f -exec ...
Stéphane Chazelas
2
Observe também que o seu fornecerá mensagens de erro para diretórios (inclusive .como você não o fornece -mindepth 1), enquanto o GNU grepnão tentará ler os diretórios com -r(ele se repete ). Você pode querer adicionar um -d skippara grep(assumindo GNU grep) ou melhor adicionar ! -type da findou ainda melhor -type f(ou -xtype fassumindo GNU find), como você provavelmente não quer grepler arquivos não-regulares.
Stéphane Chazelas 31/01
4
Costumo usar grep -Hinessa abordagem para ver o nome do arquivo e a linha em que a ocorrência está.
-n
não recursão.Respostas:
Use
-n
parano-recurse
:grep
não é recursivo por padrão e você deve usar o-r
sinalizador apenas se desejar uma pesquisa recursiva.Você pode pesquisar o diretório atual da
grep
seguinte maneira:fonte
Você pode encontrar com o argumento -exec. exemplo:
Isso pode ser escalado, ou seja,
-maxdepth 2
fonte
-maxdepth 1
) foi escalável. Por exemplo-maxdepth 2
. Não sei como descrever a edição que você fez como tal.-maxdepth
) não é uma sintaxe portátil / padrão (apenas GNU e alguns BSDs). Além disso, não faz sentido usar\;
aqui (execute umgrep
por arquivo). Usegrep -H foo {} +
(específico do GNU) ougrep foo /dev/null {} +
(padrão) para garantir que o nome do arquivo seja sempre impresso. O padrão equivalente-maxdepth 2
seriafind . -path './*/*' -type d -prune -o -type f -exec ...
.
como você não o fornece-mindepth 1
), enquanto o GNUgrep
não tentará ler os diretórios com-r
(ele se repete ). Você pode querer adicionar um-d skip
paragrep
(assumindo GNU grep) ou melhor adicionar! -type d
afind
ou ainda melhor-type f
(ou-xtype f
assumindo GNUfind
), como você provavelmente não quergrep
ler arquivos não-regulares.grep -Hin
essa abordagem para ver o nome do arquivo e a linha em que a ocorrência está.