Referenzierte Dateien durch symbolische Links ersetzen

Referenzierte Dateien durch symbolische Links ersetzen

Ich arbeite mit einem Git-Repository, das Dateien und Ordner enthält, die mit Dateien und Ordnern in einem anderen Ordner verknüpft werden müssen. Alle Symlinks werden als Text im zweiten Projektordner referenziert. Ich möchte nur wissen, wie ich alle Symlinks automatisch einrichten kann.

Beispielstruktur

project1/

---- myfile.rb

---- myfolder/

project2/

---- myfile.rb

---- myfolder


und in der Dateiprojekt2/meinedatei.rbEs enthält lediglich den folgenden Text in Zeile 1.

../project1/myfile.rb

UndProjekt2/MeinOrdnerenthält nur den Text

../project1/myfolder

Dies wird in der gesamten Dateistruktur wiederholt. Ein weiteres Beispiel wäre

Projekt2/App.rbhat den Text

../project2/app.rb

Ich verwende Ubuntu und denke, dass es eine Möglichkeit gibt, diese automatisch durchzugehen und die symbolischen Links festzulegen, anstatt jeden einzelnen manuell zu suchen.

Antwort1

Nicht, dass Git symbolische Links versionieren kann. Erwägen Sie daher, die symbolischen Links und nicht solche Dateien zu versionieren. Außerdem sollten Sie Git-Untermodule in Betracht ziehen, damit eine tatsächliche Beziehung zwischen den beiden Repositories besteht.

Wenn ich Ihre Frage/Konfiguration richtig verstanden habe, könnte das funktionieren. Es sucht (rekursiv) nach Dateien in Ordnern ./project2mit einer Zeilenanzahl von eins und ersetzt jede dieser Dateien durch einen Link zu der dort genannten Datei, vorausgesetzt, das Ziel existiert.

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

Antwort2

Führen Sie Folgendes aus Ihrem project2Verzeichnis aus:

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

Dies ist nicht rekursiv und durchsucht daher nicht die Unterverzeichnisse.

verwandte Informationen