Reemplazar archivos referenciados con enlace simbólico

Reemplazar archivos referenciados con enlace simbólico

Tengo un repositorio de git con el que estoy trabajando que tiene archivos y carpetas que deben tener enlaces simbólicos a archivos y carpetas dentro de otra carpeta. Todos los enlaces simbólicos tienen referencias como texto en la segunda carpeta de proyectos. Solo quiero saber cómo pasar y configurar todos los enlaces simbólicos automáticamente.

Estructura de ejemplo

project1/

---- myfile.rb

---- myfolder/

project2/

---- myfile.rb

---- myfolder


y en el archivoproyecto2/miarchivo.rbsolo incluye el siguiente texto en la línea 1.

../project1/myfile.rb

yproyecto2/micarpetasolo incluye el texto

../project1/myfolder

Esto se repite en toda la estructura del archivo. Otro ejemplo sería

proyecto2/app.rbtiene el texto

../project2/app.rb

Estoy en Ubuntu y creo que hay una manera de revisarlos de forma automática y configurar los enlaces simbólicos en lugar de buscarlos manualmente.

Respuesta1

No es que git pueda versionar enlaces simbólicos, así que considere versionar los enlaces simbólicos en lugar de dichos archivos. Además, es posible que desee considerar los submódulos de git para que exista una relación real entre los dos repositorios.

Si respondí correctamente su pregunta/configuración, esto podría ser la solución. Busca archivos (recursivamente) en una carpeta ./project2con un recuento de líneas de uno y reemplaza cada uno de esos archivos con un enlace al archivo nombrado allí, dado que el destino existe.

#!/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

Respuesta2

Ejecute lo siguiente desde dentro de su project2directorio:

for file in *; do
    link="$(cat "$file")"
    rm "$file"
    ln -s "$link" "$file"
done

Esto no es recursivo, por lo que no busca en subdirectorios.

información relacionada