Cách làm sạch var / cache / apt theo cách chỉ để lại các phiên bản mới nhất của mỗi gói


18

Tôi muốn biết một cách để làm sạch thư mục var / cache / apt theo cách nó chỉ để lại phiên bản mới nhất của gói nếu nó có một vài phiên bản hoặc nó để lại một gói nếu đó là một trong những chương trình đó.

Ví dụ: tôi có một số gói vlc (vlc_1.1.11, vlc_1.1.12 ..) và một số gói rượu (rượu1.3_1.3.34, rượu1.3_1.3.35, rượu1.3_1.3.36, rượu1.3_1.3.37 ...) và nhiều người khác thích điều này.

Vì vậy, làm thế nào để làm sạch trong thư mục này mà nó chỉ để lại các gói mới nhất. Hiện tại tôi có 2,5 GB và hầu hết chỉ là các gói cũ trộn lẫn với các gói mới hơn.

Câu trả lời:


9

Tôi đề xuất kịch bản bash sau đây

#!/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

Loại bỏ echokhỏirm dòng nếu bạn hài lòng với danh sách đầu ra.

Những gì nó làm?

  1. Nó liệt kê tất cả các tập tin gói deb
  2. xóa mọi thứ trong tên tệp từ đầu tiên "_" đến cuối, lấy tên gói
  3. sắp xếp tên, loại bỏ trùng lặp
  4. cho mỗi tên

    1. liệt kê các tập tin gói tương ứng với tên đó theo thứ tự thời gian
    2. đếm số lượng tập tin gói trong danh sách
    3. nếu có nhiều hơn một gói trong danh sách

      1. xóa khỏi danh sách tập tin đầu tiên và mới hơn
      2. xóa khỏi đĩa tất cả các tệp khác tương ứng với tên đó

Nó có thể được cải thiện về hiệu quả, bằng cách chỉ liệt kê các tệp gói tương ứng với tên gói thu được từ sự khác biệt giữa sortsort -u.


Nó hoạt động hoàn hảo. Tôi cũng đang cho +1 cho bồ đề vì autoclean cũng giúp làm sạch một chút. Vì vậy, có thể cả hai cùng làm một công việc tuyệt vời. Cảm ơn enzotib.
Luis Alvarado

16

sử dụng tùy chọn autoclean để apt-get hoặc aptitude

sudo apt-get autoclean
sudo aptitude autoclean

Từ trang người đàn ông

dọn dẹp

dọn dẹp các kho lưu trữ cục bộ của các tập tin gói lấy. Nó loại bỏ tất cả mọi thứ trừ tệp khóa từ / var / cache / apt / archives / và / var / cache / apt / archives / part /.

tự động làm sạch

Giống như sạch, autoclean xóa kho lưu trữ cục bộ của các tệp gói được truy xuất. Sự khác biệt là nó chỉ loại bỏ các tệp gói không còn có thể tải xuống được nữa và phần lớn là vô dụng. Điều này cho phép bộ đệm được duy trì trong một thời gian dài mà không bị mất kiểm soát.


Bạn có thể thêm sudo aptitude autoclean. Ngoài ra, autoclean trong cả hai trường hợp (apt-get và aptitude) vẫn để lại các phiên bản cũ tạo ra bước nhảy lớn như thunderbird 8.0 và thundebird 9.0. Tuy nhiên, nó đã loại bỏ các gói cũ hơn của thinderbird 8.x nhưng nó vẫn giống như các phiên bản phát hành đầy đủ mà không tính đến việc 9.0 là trên 8.0. Đây chỉ là một trong nhiều trường hợp tôi vẫn còn. Bất kỳ ý tưởng khác để đối mặt với số lượng các gói cũ hơn?
Luis Alvarado

Tôi xin lỗi, nếu autoclean không hoạt động tôi không biết một phương pháp đơn giản. Hy vọng người khác có một đề nghị tốt hơn.
Panther

0

Tôi đề xuất một tập lệnh bash đơn giản và dễ đọc hơn cho con người, dựa trên thuật toán của enzotib , không xóa các tệp bổ sung, như bản gốc:

#! /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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.