用符号链接替换引用的文件

用符号链接替换引用的文件

我有一个正在使用的 git repo,其中包含需要符号链接到另一个文件夹内的文件和文件夹的文件和文件夹的文件和文件夹。所有符号链接都以文本形式引用在第二个项目文件夹中。我只是想知道如何浏览并自动设置所有符号链接。

示例结构

project1/

---- myfile.rb

---- myfolder/

project2/

---- myfile.rb

---- myfolder


并在文件中project2/myfile.rb它仅包含第一行的以下文本。

../project1/myfile.rb

项目2/我的文件夹仅包含文本

../project1/myfolder

整个文件结构都会重复这一过程。另一个示例是

项目2/应用程序.rb有文本

../project2/app.rb

我在使用 Ubuntu,我认为有一种方法可以自动地浏览这些内容并设置符号链接,而不是手动查找每一个。

答案1

git 无法对符号链接进行版本控制,因此请考虑对符号链接进行版本控制,而不是对此类文件进行版本控制。此外,您可能还需要考虑 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

这不是递归的,所以它不会查看子目录。

相关内容