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. : -)