Skript zum Ausräumen des Mülleimers

Aus DebianforumWiki
Zur Navigation springen Zur Suche springen
Wiki ‹ Scripting ‹ Skript zum Ausräumen des Mülleimers


Review.png Review: Dieser Artikel ist für das Review freigegeben.


Getestet.png Getestet: Dieser Hinweis soll dir dabei helfen, zu entscheiden, ob dieser Artikel auf deinem System funktionieren wird oder nicht. Solltest du feststellen, dass dieser Artikel bei einer ungetestet Version funktioniert, kannst du das gerne hier korrigieren oder im Forum anmerken.




Der Mülleimer ist in seiner Größe nicht limitiert, wie in einigen anderen Betriebssystemen. Man kann deshalb regelmäßig den gesamten Mülleimer leeren. Alternativ dazu habe ich dieses Skript gebastelt, das alte Objekte aus dem Mülleimer entfernt bis sein Inhalt auf eine maximale Größe reduziert ist. Dateien mit dem aktuellen Tagesdatum werden nicht gelöscht. Hintergrundgedanke ist, dass Dateien, die vor langer Zeit gelöscht worden sind und seither nicht vermisst wurden, ruhig komplett vom System entfernt werden können. Dateien vom aktuellen Tag könnten noch einmal von Interesse sein.

Der Mülleimer befindet sich in ~/.local/share/Trash oder <mountpoint>/.Trash-<user-ID> bei externen Platten. Er enthält ein Verzeichnis "info", welches je gelöschter Datei oder Verzeichnis eine Datei mit dem gleichen Namen und der Endung .trashinfo enthält. Diese Datei ist folgendermaßen aufgebaut:

[Trash Info]
Path=<ursprünglicher Pfad> 
DeletionDate=<Löschdatum und Uhrzeit>

Das Löschdatum ist identisch mit dem Änderungsdatum der Datei .trashinfo.

Das Verzeichnis files enthält die gelöschten Dateien und Verzeichnisse.

Dieses Skript besorgt sich das Löschdatum aus info und löscht jeweils den ältesten Eintrag bis

  1. die Größe des Mülleimers kleiner oder gleich der maximalen Größe (MaxMB) ist oder
  2. die älteste Datei von heute ist

Hier das Skript als ganzes:

#!/bin/bash
# Reduce the size of all Trashes to a maximum value
# reference: http://ubuntuforums.org/showthread.php?t=319211
#	trash is in ~/.local/share/Trash or <mountpoint>/.Trash-<user-ID>
#	directory "info" contains <filename|directoryname>.trashinfo with
#		[Trash Info]
#		DeletionDate=2008-10-09T19:12:03 which is identical to Änderungsdatum of file
#	directory "files" the real file or directory
# This routine gets the deletion date from "info", and deletes the files in FIFO-manner until
#	a) diskusage for the directory <= MaxMB 
#	b) oldest file is of today (no files, that were deleted today are removed)
#
# Maximum Size of Trash
MaxMB=1000

# get current date at midnight!
Currentdate=`date '+%F '`
touch --date=$Currentdate CurrentDateFile

for CleanWhat in ~/.local/share/Trash 
do 
  echo cleaning $CleanWhat...
  Disk_Usage=$(du -sm $CleanWhat |awk '{print $1}')
#						            loop while disk usage is > MaxMB
  while [ $Disk_Usage -gt $MaxMB ]
  do
#						            get oldest file
     InfoFile=`ls -tA $CleanWhat/info |tail -1`
     InfoFile=$CleanWhat/info/$InfoFile
#						            break loop if file is not older than today
     if [ ! \( "$InfoFile" -ot CurrentDateFile \) ]
     then 
       break
     fi	
#								compose file to delete
     echo .InfoFile: $InfoFile
     echo ..`stat --printf=%y "$InfoFile"`
     DelFile=`echo $InfoFile | sed -e 's/.trashinfo//;s!/info/!/files/!'`
#								remove file, can also be a directory, remove it completely
     yes | rm -vr "$DelFile"
     DelFileError=$?
     echo ..result: $DelFileError

     yes | rm -v "$InfoFile"
     InfoFileError=$?
     echo ..result: $InfoFileError
# 							        stop if there was an error
     if [ $InfoFileError -gt 0 ] 
     then
       break
     fi

     Disk_Usage=$(du -sm $CleanWhat |awk '{print $1}')

  done
done

echo cleanung up...
rm -f CurrentDateFile

exit

Das Skript gibt es auch bei nopaste: Icon pastebin.gif 36943

Man kann das Skript auch in etwas veränderter Form auf ~/.thumbnails und ~/var/cache anwenden.

Warnung.png Warnung:

Das Skript wird aktuell unter Gnome2 eingesetzt. Die Logik des Mülleimers kann sich ändern. Vor dem Einsatz des Skripts auf dem System unbedingt eine Datensicherung durchführen und testen ob es korrekt funktioniert!



Mit dem Paket Debianpackage.png autotrash, gibt es ein ähnliches Programm auch in den Debianquellen

Autotrash ist ein Skript, um Dateien aus dem Papierkorb zu löschen und das anhand des Alters, Dateinamen oder dem restlichen freien Speicherpatz zu tun. Dafür greift das Programm unter GNOME auf die FreeDesktop.org Trash-Info-Dateien zurück.