วิธีทำความสะอาด 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

ฉันเสนอสคริปต์ทุบตีต่อไปนี้

#!/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 ให้กับ bodhi เนื่องจาก autoclean ยังช่วยทำความสะอาดอีกเล็กน้อย ดังนั้นบางทีทั้งสองร่วมกันทำงานได้ดี ขอบคุณ enzotib
Luis Alvarado

16

ใช้ตัวเลือก autoclean เพื่อรับหรือ aptitude

sudo apt-get autoclean
sudo aptitude autoclean

จากหน้าคน

สะอาด

clean จะลบที่เก็บโลคัลของไฟล์แพ็กเกจที่ดึงออกมา มันลบทุกอย่างยกเว้นไฟล์ล็อคจาก / var / cache / apt / archives / และ / var / cache / apt / archives / partial /

autoclean

เช่นเดียวกับ clean, autoclean จะล้างที่เก็บโลคัลของไฟล์แพ็กเกจที่ดึงออกมา ข้อแตกต่างคือมันลบเฉพาะไฟล์แพ็คเกจที่ไม่สามารถดาวน์โหลดได้อีกต่อไปและส่วนใหญ่จะไม่มีประโยชน์ สิ่งนี้จะช่วยให้แคชได้รับการดูแลเป็นระยะเวลานานโดยที่ไม่สามารถควบคุมได้


คุณช่วยเพิ่ม sudo aptitude autoclean ได้ไหม นอกจากนี้ autoclean ในทั้งสองกรณี (apt-get และ aptitude) ยังคงมีรุ่นเก่าที่ทำให้การกระโดดสูงเช่น Thunderbird 8.0 และ Thunderbird 9.0 อย่างไรก็ตามมันได้ทำการลบแพ็คเกจที่เก่ากว่าของ thinderbird ออกไป แต่มันก็เหมือนกับเวอร์ชั่นเต็มโดยไม่ต้องคำนึงว่า 9.0 นั้นสูงกว่า 8.0 นี่เป็นเพียงหนึ่งในหลาย ๆ กรณีที่ฉันยังเหลืออยู่ ความคิดอื่น ๆ ที่จะเผชิญกับแพคเกจที่เก่ากว่านี้หรือไม่
Luis Alvarado

ฉันขอโทษถ้า autoclean ไม่ทำงานฉันไม่รู้จักวิธีการง่าย ๆ หวังว่าคนอื่นจะมีข้อเสนอแนะที่ดีกว่า
Panther

0

ฉันเสนอสคริปต์ทุบตีที่อ่านง่ายกว่าและเป็นมนุษย์มากกว่าโดยใช้อัลกอริธึมของ enzotibซึ่งไม่ได้ลบไฟล์พิเศษอย่างที่ทำไว้:

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