우분투 리눅스에는 다음과 같이 심각하게 손상된 심볼릭 링크가 많이 있습니다.
$ ls -l setup.conf
lrwxrwxrwx 1 ont ont 27 Aug 19 15:26 setup.conf -> '# Source it'$'\r''. ../setup.conf'
. ../setup.conf
이는 프로젝트의 모든 심볼릭 링크를 대상 파일에 대한 주석 및 소스 호출("")로 바꾸려고 시도한 결과입니다. 이들은 모두 # Source it\n. .../setup.conf
심볼릭 링크 비트가 포함된 실제 텍스트 파일입니다(예: " "). 이는 git과 windows를 사용하여 수행됩니다.
한 가지 이론적 수정은 "symlink 비트"를 제거하고 결과 텍스트 파일을 변경하지 않고 그대로 두는 것입니다. 그러나 그렇게 할 수 있는 방법은 없습니다. ( chmod
다른 도구에서는 이것을 "매달린 심볼릭 링크"로 보고 텍스트 파일에서 작동하는 것을 거부합니다. 그 자체).
ls
또 다른 수정 방법은 위 명령에서 얻은 것과 동일한 내용 으로 새 파일을 수동으로 만드는 것입니다 . 지루하고 오류가 발생하기 쉽고 파일이 동일하지 않기 때문에 이 작업을 수행하지 않는 것이 좋습니다.
# Source it<newline>. ../setup.conf'
편집: 추가됨: 내용이 " " 인 setup.conf라는 일반 파일로 끝내고 싶습니다.
답변1
심볼릭 링크를 수정하고 싶은지 아니면 텍스트 파일로 바꾸고 싶은지 잘 모르겠습니다. 이 솔루션은 기호 링크를 텍스트 파일로 대체합니다.
find -type l -exec bash -c '
for f in "$@"
do
t=$(readlink "$f")
rm -f "$f"
printf "%s\n" "$t" >"$f"
done
' _ {} +
rm
printf
작성하는 대신 삭제, 수정을 통해 "$f.tmp.txt"
비파괴 테스트를 할 수 있습니다 "$f"
. ( .tmp.txt
나중에 텍스트 파일을 삭제하는 것을 잊지 마십시오.)
\r
더 쉽게 읽을 수 있도록 으로 바꾸 려면 \n
다음과 같이 할 수도 있습니다.
printf "%s\n" "${t//'$'\r/\n''}" >"$f" # non-POSIX
printf "%s\n" "$t" | tr "\r" "\n" >"$f" # POSIX