디렉토리를 가리키는 심볼릭 링크가 있는지 확인하는 방법이 있습니까?
문제
내 서버에는 여러 기호 링크가 가리키는 폴더가 있습니다.이후 새 폴더를 만들었고 새 폴더를 가리키도록 모든 심볼릭 링크를 변경하고 싶습니다.원래 폴더를 새 폴더에 대한 심볼릭 링크로 바꾸는 것을 고려했지만 계속해서 연습하면 매우 빨리 지저분해질 수 있는 것 같습니다.
내가 한 일은 새 폴더를 가리키도록 심볼릭 링크를 수동으로 변경하는 것이었지만 몇 가지를 놓쳤을 수도 있습니다.
특정 폴더를 가리키는 심볼릭 링크가 있는지 확인하는 방법이 있습니까?
해결책
find 명령을 사용하겠습니다.
find . -lname /particular/folder
그러면 현재 디렉토리에서 다음에 대한 심볼릭 링크를 재귀적으로 검색합니다. /particular/folder
.절대 심볼릭 링크만 찾습니다.비슷한 명령을 사용하여 "폴더"라는 개체를 가리키는 모든 심볼릭 링크를 검색할 수 있습니다.
find . -lname '*folder'
여기에서 거짓 긍정을 제거해야 합니다.
다른 팁
다음을 사용하여 심볼릭 링크를 감사할 수 있습니다. 그만큼 symlinks
프로그램 Mark Lord가 작성 - 전체 파일 시스템을 스캔하고 심볼릭 링크 경로를 절대 형식으로 표준화한 후 stdout으로 인쇄합니다.
실제로 이러한 심볼릭 링크를 확인할 수 있는 직접적인 방법은 없습니다.항상 마운트되지 않는 파일 시스템이 있을 수 있다는 점을 고려하십시오(예:외부 USB 드라이브), 여기에는 시스템의 다른 볼륨에 대한 심볼릭 링크가 포함될 수 있습니다.
다음을 사용하여 뭔가를 할 수 있습니다:
for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder
나는 FreeBSD의 find
을 지원하지 않습니다 -lname
옵션이 있기 때문에 위와 같은 결과가 나왔습니다.
find . -type l -printf '%p -> %l\n'
원본 폴더를 가리키는 링크가 있으면 다른 모든 폴더를 보는 것 외에는 불가능하다고 생각합니다.만약 그렇다면, 나는 관심을 가질 것입니다.
find / -lname 'fullyqualifiedpathoffile'
find /foldername -type l -exec ls -lad {} \;
하드링크의 경우 "ls" 옵션(-i
, 제 생각에는).
그 다음에 find
~와 함께 -inum
모든 공통 하드링크를 찾습니다.
소프트링크의 경우 다음을 수행해야 할 수도 있습니다. ls -l
모든 파일에서 "->" 뒤의 텍스트를 찾고 정규화하여 절대 경로인지 확인합니다.