파일 이름의 버전을 기준으로 모든 이전 버전을 찾습니다.

파일 이름의 버전을 기준으로 모든 이전 버전을 찾습니다.

이는 이 질문과 유사합니다.버전 번호가 낮은 파일 삭제

불행하게도 위의 문제에 대한 해결책은 저에게 효과적이지 않았습니다. 예를 들면 다음과 같습니다.

문서( ls -vr *.pkg.tar.xz):

wire-desktop-bin-2.11.2700-1-x86_64.pkg.tar.xz
wire-desktop-bin-2.11.2698-1-x86_64.pkg.tar.xz
wire-desktop-bin-2.11.2697-1-x86_64.pkg.tar.xz
webstorm-2016.3.3-1-x86_64.pkg.tar.xz
webstorm-2016.3.2-1-x86_64.pkg.tar.xz
visual-studio-code-1.9.0-1-x86_64.pkg.tar.xz
visual-studio-code-1.8.1-3-x86_64.pkg.tar.xz
pycharm-professional-2016.3.2-1-any.pkg.tar.xz
plasma5-applets-thermal-monitor-git-r63.fd41970-1-any.pkg.tar.xz
masterpdfeditor-qt5-3.7.10-2-x86_64.pkg.tar.xz
masterpdfeditor-4.0.30-1-x86_64.pkg.tar.xz
keepass-plugin-keeagent-0.8.1-3-any.pkg.tar.xz
jre-8u121-1-x86_64.pkg.tar.xz
jdk-8u121-1-x86_64.pkg.tar.xz
jabref-3.8.1-1-any.pkg.tar.xz
intellij-jdk-8u112b719-1-x86_64.pkg.tar.xz
intellij-jdk-8u112b657-1-x86_64.pkg.tar.xz
intellij-idea-ultimate-edition-2016.3.4-1-any.pkg.tar.xz
intellij-idea-ultimate-edition-2016.3.3-1-any.pkg.tar.xz
hstr-git-1.21.r10.gc0d3236-1-x86_64.pkg.tar.xz
google-chrome-56.0.2924.87-1-x86_64.pkg.tar.xz
google-chrome-56.0.2924.76-1-x86_64.pkg.tar.xz
gitinspector-0.4.4-1-any.pkg.tar.xz
dropbox-17.4.33-1-x86_64.pkg.tar.xz
chromium-widevine-1:1.4.8.962-1-x86_64.pkg.tar.xz

이제 모든 이전 패키지(버전 번호 != 최고)를 찾아서 나중에 제거해야 합니다.

다른 질문의 솔루션 사용:

ls -vr *.depot | awk -F- '$1 == name{system ("rm \""$0"\"")}{name=$1}'

이것을 생산한다잘못된결과:

:: os/x86_64 » ls -vr *.pkg.tar.xz | awk -F- '$1 == name{system ("echo \""$0"\"")}{name=$1}'
wire-desktop-bin-2.11.2698-1-x86_64.pkg.tar.xz
wire-desktop-bin-2.11.2697-1-x86_64.pkg.tar.xz
webstorm-2016.3.2-1-x86_64.pkg.tar.xz
visual-studio-code-1.8.1-3-x86_64.pkg.tar.xz
masterpdfeditor-4.0.30-1-x86_64.pkg.tar.xz
intellij-jdk-8u112b657-1-x86_64.pkg.tar.xz
intellij-idea-ultimate-edition-2016.3.4-1-any.pkg.tar.xz <-----------
intellij-idea-ultimate-edition-2016.3.3-1-any.pkg.tar.xz <-----------
google-chrome-56.0.2924.76-1-x86_64.pkg.tar.xz

이 목록에 주목하세요둘 다 idea-ultimate-editionintellij-jdk(awk가 먼저 분할되기 때문에 -) 패키지합니다. 이 문제를 지속적으로 해결하는 방법을 잘 모르겠습니다.

이것은 Archlinux 패키지입니다. 여기서는 pacman(Archlinux 패키지 관리자)이 도움을 줄 수 있지만 저는 Debian 시스템에서 빌드하고 저장하므로 순수한 bash/awk/etc를 선호합니다. 해결책.

답변1

모바일 버전 문자열을 분리하려면 완전한 정규식이 필요합니다. 사용하지 않는 문자를 사용하여 기본 이름을 구분하고 고유하게 정렬하세요.

예를 들어 =를 구분 기호로 사용하여 인덱스 파일을 작성하려면 다음과 같이 하십시오.

perl -le 'map { print "$1=$2" if /(\S+)-((\S+-\d+)-(x86_64|any)\.\S+)/ } @ARGV' *.pkg.tar.xz > pkgindex

고유하게 정렬하고 구분 기호를 다시 변경합니다.

sort -t= -r -k1,1 -u pkgindex | sed s/=/-/ > freshpkgs

알려진 모든 값(x86_64, i386 등)으로 아키텍처 문자열을 채우는 것을 잊지 마세요!

관련 정보