![Reemplazar archivos referenciados con enlace simbólico](https://rvso.com/image/1438158/Reemplazar%20archivos%20referenciados%20con%20enlace%20simb%C3%B3lico.png)
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 ./project2
con 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 project2
directorio:
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.