Se você precisar digitar nomes de arquivos no diretório atual, tudo o que precisa é
ack corresponde ao conteúdo dos arquivos, não ao nome deles. Para encontrar arquivos cujo nome corresponda a um regex, execute ack sobre a lista de nomes de arquivos:
ls | ack '.*group.*producer.*'
O que você fez, ou seja
ack -n '.*group.*producer.*'
irá procurar pelos arquivos no diretório atual contendo algo correspondente ao regex.
Se você deseja executar sua regex em nomes de arquivos completos, incluindo o caminho do subdiretório
ls
não vai cortá-lo, porque não tem uma opção para imprimir o caminho junto com o nome do arquivo. Em vez disso, use tree
com sinalizadores -i
(não imprima linhas de indentação) e -f
(imprima nomes de arquivo completos).
tree -if | ack 'shepherd.*\.pyc?'
retorna
./models/shepherd.py
./models/shepherd.pyc
./services/shepherd-related/flock_of_sheep.py
./services/shepherd-related/flock_of_sheep.pyc
Todos os itens acima funcionam com grep
e ack
, é claro. Mas ack
é definitivamente melhor em todos os sentidos. : -)