Supondo que não existam caracteres problemáticos (por exemplo, aqueles em IFS
) nos nomes das bibliotecas, faça um loop sobre a lista e passe cada um para um novo achado:
./libopt -d test . 2>&1 | sed -rn 's/Cannot find library \"(.*?)\"//p' \
| while read libname; do
find /usr -name "$libname"
done
Caso contrário, para uma única passagem do sistema de arquivos (a acima faz uma para cada arquivo de entrada), a opção find -name
não é adequada para corresponder a uma lista de nomes de arquivos, portanto talvez a saída de uma única pesquisa no sistema de arquivos possa ser passada para% código%. A pesquisa também pode ser reduzida procurando apenas em diretórios em grep
que são denominados /usr
:
./libopt -d test . 2>&1 | sed -rn 's/Cannot find library \"(.*?)\"//p' > blah
find /usr/lib /usr/*/lib -type f | grep -F -f blah
Use um nome de arquivo lib
generated se mktemp
for um problema. Com um shell sofisticado, o arquivo de padrões para blah
poderia ser gerado em tempo real por meio de alguma forma de substituição de processo.