Corrigir links simbólicos após a mudança de versão

2

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.

    
por Deiwin 05.10.2012 / 17:28

1 resposta

2

Eu resolvi o mesmo problema criando um link sem um número de versão usando o gsub no awk para limpá-lo do nome do arquivo e substituir o (s) link (s) por arquivos jar atualizados.

Como usamos um esquema de número de versão específico, não seria útil postá-lo aqui, mas se você realmente precisar dele, pergunte e eu o adicionarei.

Um exemplo muito básico:

find ./ -name \*[0-9]\*.jar | awk '{dest=$0;gsub(/[0-9]*/,"");\
    print "ln -sf "dest" "$0}'
    
por 05.10.2012 / 17:53

Tags