특수 대상이있는 모든 기호 링크를 제거하려면 어떻게해야합니까?

명령 사용 :

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는 정말로 GNU find를 의미했습니다. 😉 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는 갈 길입니다. 그렇지 않으면 일치하는 결과가 없습니다. 또한 lsh는 여기서 어떤 용도로도 사용되지 않습니다. '! -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

그게 다입니다.

댓글

  • 주어진 경로 아래의 타겟을 가리키는 모든 심볼릭 링크를 어떻게 제거합니까? 이 질문은 다른 디렉토리의 타겟을 가리키는 특정 디렉토리에서 심볼릭 링크를 제거하는 것에 대해 묻습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다