Skript zum Ausräumen des Mülleimers

Aus DebianforumWiki

Wechseln zu: Navigation, Suche
WikiScripting ‹ 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:

  1. #!/bin/bash
  2. # Reduce the size of all Trashes to a maximum value
  3. # reference: http://ubuntuforums.org/showthread.php?t=319211
  4. #       trash is in ~/.local/share/Trash or <mountpoint>/.Trash-<user-ID>
  5. #       directory "info" contains <filename|directoryname>.trashinfo with
  6. #               [Trash Info]
  7. #               DeletionDate=2008-10-09T19:12:03 which is identical to Änderungsdatum of file
  8. #       directory "files" the real file or directory
  9. # This routine gets the deletion date from "info", and deletes the files in FIFO-manner until
  10. #       a) diskusage for the directory <= MaxMB
  11. #       b) oldest file is of today (no files, that were deleted today are removed)
  12. #
  13. # Maximum Size of Trash
  14. MaxMB=1000
  15.  
  16. # get current date at midnight!
  17. Currentdate=`date '+%F '`
  18. touch --date=$Currentdate CurrentDateFile
  19.  
  20. for CleanWhat in ~/.local/share/Trash
  21. do
  22.   echo cleaning $CleanWhat...
  23.   Disk_Usage=$(du -sm $CleanWhat |awk '{print $1}')
  24. #                                                           loop while disk usage is > MaxMB
  25.   while [ $Disk_Usage -gt $MaxMB ]
  26.   do
  27. #                                                           get oldest file
  28.      InfoFile=`ls -tA $CleanWhat/info |tail -1`
  29.      InfoFile=$CleanWhat/info/$InfoFile
  30. #                                                           break loop if file is not older than today
  31.      if [ ! \( "$InfoFile" -ot CurrentDateFile \) ]
  32.      then
  33.        break
  34.      fi
  35. #                                                               compose file to delete
  36.      echo .InfoFile: $InfoFile
  37.      echo ..`stat --printf=%y "$InfoFile"`
  38.      DelFile=`echo $InfoFile | sed -e 's/.trashinfo//;s!/info/!/files/!'`
  39. #                                                               remove file, can also be a directory, remove it completely
  40.      yes | rm -vr "$DelFile"
  41.      DelFileError=$?
  42.      echo ..result: $DelFileError
  43.  
  44.      yes | rm -v "$InfoFile"
  45.      InfoFileError=$?
  46.      echo ..result: $InfoFileError
  47. #                                                               stop if there was an error
  48.      if [ $InfoFileError -gt 0 ]
  49.      then
  50.        break
  51.      fi
  52.  
  53.      Disk_Usage=$(du -sm $CleanWhat |awk '{print $1}')
  54.  
  55.   done
  56. done
  57.  
  58. echo cleanung up...
  59. rm -f CurrentDateFile
  60.  
  61. exit

Das Skript gibt es auch bei nopaste: NP.png 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.

Meine Werkzeuge