![Substitua os arquivos referenciados por Symlink](https://rvso.com/image/1438158/Substitua%20os%20arquivos%20referenciados%20por%20Symlink.png)
Eu tenho um repositório git com o qual estou trabalhando que contém arquivos e pastas que precisam ter um link simbólico para arquivos e pastas dentro de outra pasta. Todos os links simbólicos são referenciados como texto na segunda pasta de projetos. Só estou querendo saber como passar e ter todos os links simbólicos configurados automaticamente.
Estrutura de exemplo
project1/
---- myfile.rb
---- myfolder/
project2/
---- myfile.rb
---- myfolder
e no arquivoprojeto2/meuarquivo.rbinclui apenas o seguinte texto na linha 1.
../project1/myfile.rb
eprojeto2/minhapastainclui apenas o texto
../project1/myfolder
Isso é repetido em toda a estrutura do arquivo. Outro exemplo seria
projeto2/app.rbtem o texto
../project2/app.rb
Estou no Ubuntu e penso que existe uma maneira de passar por isso de forma automatizada e definir os links simbólicos em vez de encontrar cada um manualmente.
Responder1
Não que o git possa versionar links simbólicos, então considere versionar os links simbólicos em vez de tais arquivos. Além disso, você pode querer considerar os submódulos git para que haja uma relação real entre os dois repositórios.
Se eu entendi sua pergunta/configuração corretamente, isso pode resolver o problema. Ele procura arquivos (recursivamente) na pasta ./project2
com contagem de linha de um e substitui cada um desses arquivos por um link para o arquivo nomeado ali, desde que o destino exista.
#!/bin/bash
for file in $(find project2/ -type f )
do
linecount=$(wc -l $file | awk '{print $1}')
if [ $linecount -eq 1 ]; then
target=$(cat $file)
relTarget=$(dirname $file)/$target
if [ -f $relTarget ] || [ -d $relTarget ]; then
rm $file
ln -s $target $file
fi
fi
done
Responder2
Execute o seguinte dentro do seu project2
diretório:
for file in *; do
link="$(cat "$file")"
rm "$file"
ln -s "$link" "$file"
done
Isso não é recursivo, portanto não examina subdiretórios.