参照ファイルをシンボリックリンクに置き換える

参照ファイルをシンボリックリンクに置き換える

私が作業している Git リポジトリには、別のフォルダー内のファイルとフォルダーへのシンボリックリンクにする必要があるファイルとフォルダーがあります。すべてのシンボリックリンクは、2 番目のプロジェクト フォルダーでテキストとして参照されます。すべてのシンボリックリンクを自動的に設定する方法を知りたいだけです。

構造例

project1/

---- myfile.rb

---- myfolder/

project2/

---- myfile.rb

---- myfolder


そしてファイルにはプロジェクト2/myfile.rb1 行目には次のテキストのみが含まれます。

../project1/myfile.rb

そしてプロジェクト2/私のフォルダテキストのみを含む

../project1/myfolder

これはファイル構造全体で繰り返されます。別の例は次のとおりです。

プロジェクト2/app.rbテキストがある

../project2/app.rb

私は Ubuntu を使用していますが、これらを手動で 1 つ 1 つ探すのではなく、自動的に調べてシンボリック リンクを設定する方法があるのではないかと考えています。

答え1

Git はシンボリックリンクをバージョン管理できないので、そのようなファイルではなくシンボリックリンクをバージョン管理することを検討してください。また、2 つのリポジトリ間に実際の関係が存在するように、Git サブモジュールを検討することもできます。

質問/設定が正しければ、これでうまくいくかもしれません。これは、./project2行数が 1 のフォルダー内のファイルを (再帰的に) 検索し、ターゲットが存在する場合は、それらの各ファイルをそこに名前が付けられたファイルへのリンクに置き換えます。

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

これは再帰的ではないので、サブディレクトリは検索されません。

関連情報