Como exemplo, vamos considerar esses arquivos:
$ ls -LR1
.:
a
./a:
b
./a/b:
bad
Do_good
Agora, vamos encontrar o arquivo que você deseja:
$ ls -LR1 | awk '/^\.\//{sub(/:$/, "/", $0); dir=$0} /^Do/{print dir $0}'
./a/b/Do_good
Como funciona:
-
/^\.\//{sub(/:$/, "/", $0); dir=$0}Sempre que encontramos uma linha que começa com
./, substituímos a localização:por/e atualizamos a variáveldir -
/^Do/{print dir $0}Sempre que encontramos uma linha que inicia
Do, imprimimos a variáveldirseguida por esta linha.
Limitação: Como você sabe, a saída de ls deve ser legível e analisada, não é confiável. Este código serve apenas para demonstrar o uso de awk . Não deve ser usado para nada sério.
Método preferido
Como curinga apontou, find é a ferramenta certa para essa tarefa:
$ find . -name 'Do*'
./a/b/Do_good