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áveldir
seguida 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