다른 디렉터리에 대한 많은 심볼릭 링크가 포함된 디렉터리가 있습니다. 이제 심볼릭 링크를 통해 연결된 디렉터리의 공통 조상 디렉터리의 이름을 바꾸고 심볼릭 링크가 동일한 디렉터리(이름이 바뀐 경로 이름 외에)를 가리키도록 하고 싶습니다. 예를 들어, 심볼릭 링크가 /home/Tim/dir1
, , ...을 가리키고 있습니다. 이제 심볼릭 링크가 , , ...을 /home/Tim/dir2
가리키도록 하고 싶습니다 ./data/Tim/dir1
/data/Tim/dir2
심볼릭 링크 업데이트 프로세스를 자동화하고 싶습니다. 그러나 몇 가지 문제가 있습니다:
심볼릭 링크는 편집이 불가능하다고 들었습니다. 그러면 새 심볼릭 링크를 만든 다음 기존 심볼릭 링크를 덮어써야 합니까?
심볼릭 링크가 가리키는 디렉토리의 경로 이름을 얻은 다음 일부 텍스트 처리 프로그램을 사용하여 경로 이름에 있는 조상 디렉토리의 이전 이름을 새 이름으로 바꾸고 새 이름을 사용하여 해당 디렉토리를 가리키는 심볼릭 링크를 만드는 방법 ? 감사해요.
답변1
심볼릭 링크는 편집이 불가능하다고 들었습니다. 그러면 새 심볼릭 링크를 만든 다음 기존 심볼릭 링크를 덮어써야 합니까?
심볼릭 링크는 편집할 수 없습니다. 맞습니다. -f
옵션을 사용하여 단일 작업으로 파일의 심볼릭 링크를 바꿀 수 있으며 ln
추가된 경우 -T
동일한 방식으로 디렉터리에 대한 심볼릭 링크를 처리할 수 있습니다 .
ln -sfT /data/Tim/dir1 symlink1
symlink1
을 가리키는 /data/Tim/dir1
기존 심볼릭 링크(또는 파일!)를 대체하여 생성됩니다 symlink1
.
심볼릭 링크가 가리키는 디렉토리의 경로 이름을 얻은 다음 일부 텍스트 처리 프로그램을 사용하여 경로 이름에 있는 조상 디렉토리의 이전 이름을 새 이름으로 바꾸고 새 이름을 사용하여 해당 디렉토리를 가리키는 심볼릭 링크를 만드는 방법 ?
realpath
심볼릭 링크가 가리키는 절대 경로를 제공합니다. 심볼릭 링크를 처리하려면:
for symlink in *; do
if [ -L "${symlink}" ]; then
origpath="$(realpath "${symlink}")" && ln -sfT "${origpath/home/data}" "${symlink}"
fi
done
이렇게 하면 현재 디렉터리의 모든 파일에 대한 경로를 검색하고(따라서 현재 디렉터리의 모든 심볼릭 링크 를 수정해야 한다고 가정 합니다) 이를 다시 연결하여 첫 번째 항목 home
을 data
. 교체됨(대상이 없으면 실패함)&&
realpath