![mv 파일에 대한 심볼릭 링크를 끊지 않고 파일을 엽니다.](https://linux55.com/image/17487/mv%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%EB%A5%BC%20%EB%81%8A%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%97%BD%EB%8B%88%EB%8B%A4..png)
mv
파일에 대한 심볼릭 링크를 끊지 않고 파일을 생성 할 수 있습니까 ? 이에 대한 나의 초기 반응은 '아니요'입니다. 이동 후 즉시 링크를 변경하기 위한 스크립트 기반 솔루션을 개발 중이지만 다른 사람들은 이 문제를 어떻게 해결했는지 알고 싶습니다. 심볼릭 링크의 경로와 이름은 미리 알려져 있으므로 이론적으로 해야 할 일은 다음과 같습니다.
- 링크의 대상을 가져옵니다
- MV 목표
- 새 대상에 대한 링크를 다시 만듭니다.
- 새 대상을 가리키는 새 링크를 만듭니다(지금은 유지하고 싶은 원래 링크와는 다름).
나중에:
- 오래된 링크 삭제
1-4는 bash 스크립트로 캡슐화되지만 누군가가 더 우아한 방법을 가지고 있거나 내가 모르는 내장 또는 명령을 알고 있는지 궁금합니다.
답변1
당신은 올바른 길을 가고 있습니다. 당신이 설명하는 순서보다 더 쉬운 방법은 없다고 생각합니다.
3단계와 4단계는 약간 혼란스럽습니다. 기존 링크를 재배치하려는 경우 ln -f
동일한 이름으로 기존 파일을 덮어쓸 수 있습니다. 새 대상 이름을 반영하여 링크 이름도 변경하려면 순서가 올바른 것입니다.
답변2
귀하의 상황에 맞게:
# change target of a symbolic link
# -------------
# ln -s, --symbolic make symbolic links instead of hard links
# ln -f, --force remove existing destination files
#
# Setup: make junk.link to file junk
echo hello > ~/junk
ln -s ~/junk ~/junk.link; cat ~/junk.link
#
# move file and point the link to it.
org="$(readlink ~/junk.link)"
new="$org".moved
mv "$org" "$new"
ln -s -f "$new" "$new".link # '-s' for a soft link