명령 사용 :
ls -la *
모든 심볼릭 링크를 나열 할 수 있습니다.
특수 폴더에 링크 된 모든 심볼릭 링크를 제거하려면 어떻게해야합니까?
예 :
내 디렉토리 usr/local/bin
다음 항목이 있습니다.
lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara
이제 경로가 /usr/local/texlive/
댓글
- 대상 폴더에 연결된 모든 심볼릭 링크를 제거한다는 의미입니까? 아니면 발견 된 모든 심볼릭 링크를 특정 폴더로 이동 하시겠습니까?
- @uther : 링크 제거를 의미합니다.
답변
대체 답변 을 읽어보세요. . 이 시점에서 높은 순위로 투표되지는 않았지만 훨씬 더 중요합니다.
이를 사용하여 모든 심볼릭 링크를 삭제할 수 있습니다.
find -type l -delete
최신 find
버전.
이전 찾기 버전에서는 다음과 같아야 할 수 있습니다.
find -type l -exec rm {} \; # or find -type l -exec unlink {} \;
경로에 개행 문자가 포함되어 있지 않다고 가정하고 특정 링크 대상으로 제한하려면 :
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done
또는 형식이 잘 지정된
find -type l | while IFS= read -r lnkname; do if [ "$(readlink "$lnkname")" = "/your/exact/path" ]; then rm -- "$lnkname" fi done
물론 if
에는 패턴을 grep
.
케이스에 맞게 조정 :
find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q "^/usr/local/texlive/"); then rm "$lnk"; fi; done
또는 형식이 잘 지정됨 :
find -type l | while IFS= read -r lnk do if readlink "$lnk" | grep -q "^/usr/local/texlive/" then rm "$lnk" fi done
댓글
- 이 명령이 모든 심볼릭 링크를 제거합니까? 위의 편집 내용을 참조하십시오.
- @ Marco : 네, 처음 세 줄이 그럴 것입니다. 더 편집하기 🙂
-
-print
도
명령을 사용하여 시각적 피드백을받습니다.
답변
-lname
를 지원하는 최신 find
:
find /usr/local/bin -lname "/usr/local/texlive/*" -delete
댓글
- 이것은 훌륭하고 간단한 솔루션입니다. 나는 테스트했고 그것은 매력처럼 작동합니다. 감사합니다
- 아마도
find /usr/local/bin
- 현대적 일 필요도 없습니다. GNU
find
는 제가 유지 한 것보다 더 오랫동안-lname
를 유지했습니다 (2003 년경부터). - @JamesYoungman : 감사! 현대의
find
는 정말로 GNUfind
를 의미했습니다. 😉usr/local/bin
를 사용했습니다. 그 이유는 '이 OP가 사용한 것이기 때문입니다.
답변
find
솔루션은 훌륭합니다.
찾을 수없는 경우를 대비하여 -lname
를 지원합니다. 여기에 쉘과 readlink
만 사용하는 또 다른 방법이 있습니다.
cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done
답변
zsh
사용 :
rm -f /usr/local/bin(@e"{[[ $REPLY:P = /usr/local/texlive/* ]]}")
$REPLY:P
는 심볼릭 링크가없는 경로를 완전히 확인하므로 /usr/local/texlive
자체가 심볼릭 링크가 없다고 가정합니다. , /usr/local/texlive/foo
뿐만 아니라 iv id = “1f494f4bde에 대한 링크를 포함하는 /usr/local/textlive
아래에있는 모든 파일을 제거합니다. “>
또는 /usr/./local/texlive/whatever
또는 /some/other/symlink
(/usr/local/texlive
등
답변
경로로 이동하여 경로 구성 설정
ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk "{print $9}"|xargs rm -rf
댓글
-
grep
가 검색하는usr/local/bin
와 같은 경로이므로grep -E
는 갈 길입니다. 그렇지 않으면 일치하는 결과가 없습니다. 또한ls
의h
는 여기서 어떤 용도로도 사용되지 않습니다. '!-h, --human-readable : with -l, print sizes in human readable format (e.g., 1K 234M 2G)
자세한 내용은man ls
또는man grep
답변
sudo unlink /path/of/your/package
그게 다입니다.
댓글
- 주어진 경로 아래의 타겟을 가리키는 모든 심볼릭 링크를 어떻게 제거합니까? 이 질문은 다른 디렉토리의 타겟을 가리키는 특정 디렉토리에서 심볼릭 링크를 제거하는 것에 대해 묻습니다.