특수 대상이 있는 모든 심볼릭 링크를 제거하는 방법은 무엇입니까?

특수 대상이 있는 모든 심볼릭 링크를 제거하는 방법은 무엇입니까?

사용 명령:

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/

답변1

꼭 읽어주세요대체 답변. 게다가 투표율은 아직 그렇게 높지 않지만요.

이를 사용하여 모든 심볼릭 링크를 제거할 수 있습니다.

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

답변2

최신 find지원 -lname:

find /usr/local/bin -lname '/usr/local/texlive/*' -delete

그것은 이루어져야합니다.

답변3

해결책은 find훌륭합니다.

귀하의 검색 결과가 이를 지원하지 않는 경우를 대비 -lname하여 셸과 readlink.

cd /usr/local/bin
for f in *; do
  case "$(readlink "$f")" in /usr/local/texlive/*)
    rm "$f"
    ;;
  esac
done

답변4

경로로 이동하여 자신만의 경로 구성을 설정하세요.

ls -alh|grep "your-pattern-to-file-or-folder-for-symlink"| awk '{print $9}'|xargs rm -rf

관련 정보