Substitua os arquivos referenciados por Symlink

Substitua os arquivos referenciados por Symlink

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 ./project2com 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 project2diretó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.

informação relacionada