![참조 파일을 Symlink로 교체](https://rvso.com/image/1438158/%EC%B0%B8%EC%A1%B0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20Symlink%EB%A1%9C%20%EA%B5%90%EC%B2%B4.png)
다른 폴더 내의 파일 및 폴더에 대한 심볼릭 링크가 필요한 파일 및 폴더가 있는 작업 중인 git repo가 있습니다. 모든 심볼릭 링크는 두 번째 프로젝트 폴더의 텍스트로 참조됩니다. 저는 모든 심볼릭 링크를 자동으로 설정하는 방법을 알고 싶습니다.
예제 구조
project1/
---- myfile.rb
---- myfolder/
project2/
---- myfile.rb
---- myfolder
그리고 파일에프로젝트2/myfile.rb라인 1에는 다음 텍스트만 포함됩니다.
../project1/myfile.rb
그리고프로젝트2/내 폴더텍스트만 포함
../project1/myfolder
이는 파일 구조 전체에서 반복됩니다. 또 다른 예는 다음과 같습니다.
프로젝트2/app.rb텍스트가 있습니다
../project2/app.rb
나는 우분투에 있고 이것을 자동화된 방식으로 진행하고 수동으로 각 심볼릭 링크를 찾는 대신 심볼릭 링크를 설정하는 방법이 있다고 생각합니다.
답변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
이는 재귀적이지 않으므로 하위 디렉터리를 조사하지 않습니다.