Eu tenho um aplicativo da web que possui vários links simbólicos em subdiretórios. Preciso mover o aplicativo para outra estrutura de diretório e atualizar todos os links simbólicos para apontar para o novo caminho. Por exemplo:
Dir antigo: Dir /home/user/public_html/dev
novo: /home/user/public_html/qa
Link simbólico antigo: /home/user/public_html/qa/multisites/slave01/images -> /home/user/public_html/dev/images
Link simbólico novo:/home/user/public_html/qa/multisites/slave01/images -> /home/user/public_html/qa/images
O problema é que existem muitos deles espalhados por vários diretórios. Como posso recursivamente pesquisar a partir da raiz e recriar todos os links simbólicos que apontam para /dev/
com /qa/
?
fonte
find /home/user/public_html/qa/ -type l -lname '/home/user/public_html/dev/*'
não gera nada.find /home/usr/public_html/qa/ -type l
? Se isso não encontrar os links, algo muito estranho está acontecendo com seu sistema.find /home/user/public_html/qa/ -type l
" gera os links. Mas adicionar o parâmetro -lname não gera nada.Caso outra pessoa encontre isso ao procurar uma solução: Crie um arquivo chamado "linkmod.sh" contendo:
e corra
Você pode usar a opção -lname para localizar, se necessário.
NOTA: você precisa usar 2x \ nos padrões antes de qualquer caractere que exija \ in sed, pois o eco remove um. Por exemplo
Remova
echo
da última linha se os comandos ln estiverem corretos.fonte
echo
na linha final do roteiro eecho
nofind .. | xargs .. linkmod.sh ...
próprio comando ambos têm de ser retirados.Criei um script bash
link_rename.sh
para renomear recursivamente os links simbólicos em um determinado diretórioPode ser executado como
link_rename.sh /home/human/dir link1 link2
O script possui 3 argumentos:
link1
está o antigo padrão que será substituídolink2
está o novo padrão com o quallink1
será substituídoO script lê recursivamente todos os links simbólicos no diretório usando
find "$DIR" -type l
e processa linha por linha.$line
é o link simbólico que precisa ser renomeadoCUR_LINK_PATH
é o caminho antigoNEW_LINK_PATH
é obtido executando a substituição de cadeia no caminho do link antigo.O link simbólico antigo é removido e o novo link simbólico é criado usando
ln -s "$NEW_LINK_PATH" "$line"
fonte
Acabei escrevendo um script PHP de linha de comando que parece fazer o truque.
fonte