![用符號連結取代引用的文件](https://rvso.com/image/1438158/%E7%94%A8%E7%AC%A6%E8%99%9F%E9%80%A3%E7%B5%90%E5%8F%96%E4%BB%A3%E5%BC%95%E7%94%A8%E7%9A%84%E6%96%87%E4%BB%B6.png)
我正在使用一個 git 儲存庫,其中包含需要符號連結到另一個資料夾內的文件和資料夾的文件和資料夾。所有符號連結都在第二個項目資料夾中被引用為文字。我只是想知道如何完成並自動設定所有符號連結。
結構範例
project1/
---- myfile.rb
---- myfolder/
project2/
---- myfile.rb
---- myfolder
並在文件中專案2/myfile.rb它只包含第 1 行的以下文字。
../project1/myfile.rb
和項目2/我的資料夾僅包含文本
../project1/myfolder
這在整個文件結構中重複出現。另一個例子是
項目2/app.rb有文字
../project2/app.rb
我在 Ubuntu 上,認為有一種方法可以自動檢查這些並設置符號鏈接,而不是手動查找每個符號鏈接。
答案1
git 無法對符號連結進行版本控制,因此請考慮對符號連結而非此類檔案進行版本控制。另外,您可能需要考慮 git 子模組,以便兩個儲存庫之間存在實際關係。
如果我的問題/設定正確,這可能會成功。它在行數為 1 的資料夾中(遞歸地)搜尋文件./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
這不是遞歸的,因此它不會查看子目錄。