Digamos que eu tenha um link simbólico para um arquivo, que tem sua versão em seu nome. (O arquivo é, na verdade, um arquivo jar) Agora, diga que a versão muda, ou seja, o arquivo antigo ao qual eu fiz o link é excluído e um novo é gerado com uma versão diferente em seu nome. Como faço para gerar um novo link com o novo nome apontando para o arquivo jar recém-gerado e excluir o link antigo em um script bash.
O que tenho trabalhado até aqui é algo assim:
cd $THE_FOLDER_OF_BROKEN_LINKS
find . -type l -exec test ! -e {} \; -print0 | xargs -0 -i readlink "{}" | sed -r "s#(.*/).*\.jar##g"
O que me faz, para cada um dos links quebrados, uma pasta onde o novo arquivo jar está localizado. O que eu tentei fazer a seguir, é encontrar os novos arquivos jar, assim:
cd $THE_FOLDER_OF_BROKEN_LINKS
find . -type l -exec test ! -e {} \; -print0 | xargs -0 -i find 'readlink "{}" | sed -r "s#(.*/).*\.jar##g"' -name "prefix*.jar"
O que deveria me dar os novos jars, e funciona, mas funciona de forma recursiva, então não posso usá-lo. Não sei se há mais alguma coisa que corresponda a esse padrão nas pastas recursivas, tudo o que sei, que nesta pasta atual há apenas um jar correspondente ao regex prefix*.jar
, que é o que preciso vincular.
Depois disso, eu preciso realmente criar o link, que eu acho que não é difícil, dependendo de como encontrar esse arquivo que estou procurando, porque o nome do arquivo pode permanecer o mesmo (ou seja, nenhum segundo argumento necessário para ln
). Mas eu não tenho idéia de como deletar os links quebrados sem chamar o comando initial find novamente.
Já enfrentei esse problema por um tempo, porque sou relativamente novo no Linux, mas finalmente recorri a pedir ajuda, porque eu realmente não deveria gastar tanto tempo com um problema tão trivial.