
중간자 링크를 재귀적으로 제거하는 방법은 무엇입니까? 예를 들어:
somelink -> someintermediarylink -> actualfile.txt
될 것입니다
somelink -> actualfile.txt
디렉토리 및 하위 디렉토리의 모든 파일에 대해(즉, 재귀적으로)
아이디어가 있나요?
답변1
GNU 도구 사용:
find . -type l ! -xtype l -exec sh -c '
for link do
target=$(readlink -e -- "$link") &&
ln -svTf -r -- "$target" "$link"
done' sh {} +
깨지지 않은 모든 심볼릭 링크를 상대 링크로 변경하고 대상에 심볼릭 링크 구성 요소가 없습니다.
-r
절대 심볼릭 링크를 원하면 삭제하세요.
이러한 기호 링크가 가리키는 파일의 정식 절대 이름은 개행 문자로 끝나지 않는다고 가정합니다(명령 대체의 일반적인 제한은 모든 후행 개행 문자를 제거하는 것입니다).
답변2
#!/bin/bash
# Usage: ./relinkToFinalDestination directory_path
directory=$1
find -L $directory -xtype l | while read file; do
next_hop=$(readlink "$file")
if [[ -e $next_hop ]]; then
final=$(readlink -e "$file")
echo "Got final path for $file --> $final"
# Update the link
ln -sf "$final" "$file"
fi
done