Como fazer a pesquisa em profundidade máxima no ack e grep?

32

Existe alguma maneira de dizer ackpara procurar apenas texto na pasta atual? (ou especificar um max-depthnível?) E com grep?

Amelio Vazquez-Reina
fonte
1
Não, o ack não tem uma opção de profundidade máxima, exceto a -nnão recursão.
Andy Lester

Respostas:

22

Use -npara no-recurse:

$ ack -n foo

grepnão é recursivo por padrão e você deve usar o -rsinalizador apenas se desejar uma pesquisa recursiva.

Você pode pesquisar o diretório atual da grepseguinte maneira:

$ grep -- foo *
Eric Wilson
fonte
13
Não responde a pergunta? (e se eu quiser recuar até uma profundidade de 2)
Steven Lu
Bom ponto, eu perdi isso. Alguma sugestão?
Eric Wilson
29

Você pode encontrar com o argumento -exec. exemplo:

find . -maxdepth 1 -exec grep foo {} \;

Isso pode ser escalado, ou seja, -maxdepth 2

David Wilkins
fonte
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á.
GDP2 11/11/19