각 패키지의 최신 버전 만 남기도록 var / cache / apt를 정리하는 방법


18

var / cache / apt 폴더를 정리하는 방법을 알고 싶습니다. 여러 버전이있는 경우 최신 버전의 패키지 만 남겨 두거나 해당 프로그램 중 하나 인 경우 패키지를 떠납니다.

예를 들어 여러 vlc 패키지 (vlc_1.1.11, vlc_1.1.12 ..)와 여러 와인 패키지 (wine1.3_1.3.34, wine1.3_1.3.35, wine1.3_1.3.36, wine1.3_1.3.37 ...)가 있습니다. 그리고 다른 많은 사람들이 이것을 좋아합니다.

따라서이 폴더에서 정리하는 방법은 최신 패키지 만 남습니다. 현재 2.5GB가 있으며 대부분 최신 패키지와 새로운 패키지가 혼합되어 있습니다.

답변:


9

다음 bash 스크립트를 제안합니다

#!/bin/bash

cd /var/cache/apt/archives/
printf '%s\n' *.deb | 
  awk -F_ '{ print $1 }' |
  sort -u | 
  while read pkg; do 
    pkg_files=($(ls -t "$pkg"_*.deb))
    nr=${#pkg_files[@]}
    if ((nr > 1)); then
      unset pkg_files[0]
      echo rm "${pkg_files[@]}"
    fi
  done

출력리스트에 만족 echo하면 rm라인 에서를 제거하십시오 .

그것은 무엇입니까?

  1. 모든 deb 패키지 파일을 나열합니다.
  2. 파일 이름에서 처음 "_"부터 끝까지 모든 것을 제거 하여 패키지 이름을 얻습니다.
  3. 중복을 제거하고 이름을 정렬
  4. 각 이름마다

    1. 해당 이름에 해당하는 패키지 파일을 시간 순서대로 나열
    2. 목록에서 패키지 파일 수를 센다
    3. 목록에 둘 이상의 패키지가있는 경우

      1. 첫 번째 및 최신 파일을 목록에서 제거
      2. 해당 이름에 해당하는 다른 모든 파일을 디스크에서 제거

그것은 차이에서 얻은 이름 패키지에 해당하는 파일들만을 나열하여, 효율을 향상시킬 수 sortsort -u.


완벽하게 작동했습니다. 자동 청소도 약간 청소하는 데 도움이 되었기 때문에 보디에게 +1을주고 있습니다. 아마 둘 다 함께 위대한 일을 할 것입니다. 감사합니다.
Luis Alvarado

16

자동 청소 옵션을 사용하여 apt-get 또는 atitude

sudo apt-get autoclean
sudo aptitude autoclean

매뉴얼 페이지에서

깨끗한

clean은 검색된 패키지 파일의 로컬 저장소를 지 웁니다. / var / cache / apt / archives / 및 / var / cache / apt / archives / partial /에서 잠금 파일을 제외한 모든 것을 제거합니다.

자동 청소

정리와 마찬가지로 자동 정리는 검색된 패키지 파일의 로컬 저장소를 지 웁니다. 차이점은 더 이상 다운로드 할 수없고 크게 쓸모가없는 패키지 파일 만 제거한다는 것입니다. 이를 통해 캐시가 제어 범위를 벗어나지 않고 오랜 기간 동안 유지 될 수 있습니다.


sudo aptitude autoclean을 추가 할 수 있습니까? 또한 두 경우 모두 자동 청소 (apt-get 및 aptitude)는 Thunderbird 8.0 및 thundebird 9.0과 같은 큰 점프를 만드는 이전 버전을 그대로 둡니다. 그러나 thinderbird 8.x 이전 패키지는 제거했지만 9.0이 8.0 이상임을 고려하지 않고 정식 버전으로 유지됩니다. 이것은 내가 아직도 떠난 많은 사례 중 하나입니다. 이 정도의 오래된 패키지에 직면 할 다른 아이디어가 있습니까?
Luis Alvarado

자동 청소가 작동하지 않으면 간단한 방법을 모릅니다. 다른 사람에게 더 나은 제안이 있기를 바랍니다.
Panther

0

나는 enzotib의 알고리즘 에 기초하여 더 간단하고 인간이 읽을 수있는 bash 스크립트를 제안합니다 .

#! /usr/bin/env bash

cd /var/cache/apt/archives/
for pkg in `ls *.deb | cut -d _ -f 1 | sort -u`; do
    if [ $(ls $pkg\_* | wc -l) -gt 1 ]; then
        files=$(ls -vr $pkg\_*)
        rmfiles=`echo $files | cut -d " " -f 2-`
        rm -v $rmfiles
    fi
done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.