Aqui está uma possível solução para o seu problema que deve ser razoavelmente (mas não perfeitamente) segura na presença de nomes de arquivos (não manipula nomes de arquivos com alimentações de linha neles - provavelmente corrigíveis, mas pode haver outros problemas à espreita).
Duas funções, a primeira executa find
com os parâmetros que você passa, salva a saída em uma matriz e as exibe. O segundo é apenas um ajudante para acessar esse array.
myfind() {
IFS=$'\n' __last_find_result=($(find "$@"));
printf "%s\n" "${__last_find_result[@]}";
}
myget() {
echo "${__last_find_result[$1]}";
}
Caso de uso:
$ myfind . -name "c*"
./a b/c d
./.git/config
./.git/hooks/commit-msg.sample
$ vim "$(myget 0)"
# This opens the "./a b/c d" file.
$ vim "$(myget 2)"
# This opens ".git/hooks/commit-msg.sample"
As citações não são necessárias em torno do $(myget index)
se você não tiver espaço em branco ou outros caracteres problemáticos em seus nomes de arquivos.
Envia toda a saída de find
para o seu ambiente, o que pode ser limitado. (Usar um arquivo temporário em vez daquele array resolveria isso, mas tem outros problemas - principalmente o uso simultâneo de vários shells).