이름에 해당 버전이 포함된 파일에 대한 심볼릭 링크가 있다고 가정해 보겠습니다. (파일은 실제로 jar 파일입니다.) 이제 버전이 변경되었다는 메시지가 표시됩니다. 즉, 연결한 이전 파일이 삭제되었고 이름이 다른 버전으로 새 파일이 생성되었습니다. 새로 생성된 jar 파일을 가리키는 새 이름으로 새 링크를 생성하고 bash 스크립트에서 이전 링크를 삭제하는 방법.
지금까지 내가 한 일은 다음과 같습니다.
cd $THE_FOLDER_OF_BROKEN_LINKS
find . -type l -exec test ! -e {} \; -print0 | xargs -0 -i readlink "{}" | sed -r "s#(.*/).*\.jar#\1#g"
끊어진 링크마다 새 jar 파일이 있는 폴더가 제공됩니다. 다음으로 시도한 작업은 다음과 같은 새 jar 파일을 찾는 것이었습니다.
cd $THE_FOLDER_OF_BROKEN_LINKS
find . -type l -exec test ! -e {} \; -print0 | xargs -0 -i find `readlink "{}" | sed -r "s#(.*/).*\.jar#\1#g"` -name "prefix*.jar"
이것은 나에게 새로운 병을 가져와야 하고 그렇습니다. 하지만 재귀적으로 작동하므로 사용할 수 없습니다. 재귀 폴더에 이 패턴과 일치하는 다른 항목이 있는지는 모르겠습니다. 단지 현재 폴더의 정규식과 일치하는 항아리가 하나만 있다는 것과 prefix*.jar
그에 대해 연결해야 한다는 것만 알고 있습니다.
ln
그런 다음 실제로 링크를 만들어야 합니다. 파일 이름은 동일하게 유지될 수 있기 때문에(즉, 두 번째 인수가 필요하지 않음 ) 찾고 있는 이 파일을 찾는 방법에 따라 그리 어렵지 않다고 생각합니다 . 하지만 초기 find 명령을 다시 호출하지 않고 끊어진 링크를 제거하는 방법을 모르겠습니다.
이 질문은 제가 Linux를 처음 접했기 때문에 한동안 지속되었지만, 이렇게 사소한 문제에 너무 많은 시간을 소비해서는 안 되기 때문에 마침내 도움을 요청했습니다.
답변1
awk에서 gsub를 사용하여 파일 이름에서 이를 지우고 버전 번호 없이 링크를 생성하고 링크를 업그레이드된 jar 파일로 대체하여 동일한 문제를 해결했습니다.
특정 버전 번호 체계를 사용하므로 여기에 게시하는 것은 도움이 되지 않지만 꼭 필요한 경우 요청해 주시면 추가하겠습니다.
매우 기본적인 예:
find ./ -name \*[0-9]\*.jar | awk '{dest=$0;gsub(/[0-9]*/,"");\
print "ln -sf "dest" "$0}'