Заменить указанные файлы на символические ссылки

Заменить указанные файлы на символические ссылки

У меня есть git-репозиторий, с которым я работаю, в котором есть файлы и папки, которые нужно сделать символическими ссылками на файлы и папки внутри другой папки. Все символические ссылки указаны в виде текста во второй папке проектов. Я просто хочу узнать, как пройти и автоматически настроить все символические ссылки.

Пример структуры

project1/

---- myfile.rb

---- myfolder/

project2/

---- myfile.rb

---- myfolder


и в файлепроект2/мойфайл.rbон включает только следующий текст в строке 1.

../project1/myfile.rb

ипроект2/мояпапкавключает только текст

../project1/myfolder

Это повторяется по всей структуре файла. Другой пример:

проект2/app.rbимеет текст

../project2/app.rb

Я работаю в Ubuntu и думаю, что есть способ пройти по ним автоматически и установить символические ссылки, а не искать каждую из них вручную.

решение1

Не то чтобы git мог версионировать симлинки, поэтому рассмотрите версионирование симлинков, а не таких файлов. Также вы можете рассмотреть подмодули git, чтобы между двумя репозиториями была реальная связь.

Если я правильно понял ваш вопрос/настройку, это может сработать. Он ищет файлы (рекурсивно) в папке ./project2с количеством строк, равным одной, и заменяет каждый из этих файлов ссылкой на файл, указанный там, при условии, что цель существует.

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

решение2

Запустите следующую команду из вашего project2каталога:

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

Это не рекурсивно, поэтому подкаталоги не просматриваются.

Связанный контент