Shell: In den Papierkorb verschieben

Veröffentlicht am

Wer per rm auf der Shell Dateien löscht überlegt besser zweimal, bevor er die ENTER-Taste drückt. Da die „Undo“-Möglichkeit fehlt, hat man nicht selten ein mulmiges Gefühl, besonders wenn mit Wildcards gearbeitet wird (naja, zumindest geht es mir so…).

Dabei kann man auch von der Shell aus, Dateien nur „anlöschen“ (sorry, musste den Begriff einfach unterbringen :) – gemeint ist natürlich das Löschen in den Papierkorb). Es ist allerdings ein kleines Skript notwendig…

Mit einem kleinen Skript kann man bewerkstelligen, dass man Dateien auf der Shell „in den Papierkorb löschen“ (also verschieben) kann. Dazu muss dieses Skript zwei Dinge erledigen:

  1. Die zu löschende Datei in den Ordner ~/.local/share/Trash/files verschieben.
  2. Im Ordner ~/.local/share/Trash/info eine Datei mit dem gleichen Basename, aber Endung .trashinfo anlegen. In dieser Datei steht der Pfad, der angibt, wo die Datei stand, als sie gelöscht wurde. Außerdem ein Zeitstempel der Löschung.

Mein rmtrash.sh-Skript, das genau diese Aufgaben erledigt, sieht so aus:

#!/bin/bash
for f in "$@"; do
    d=$(dirname "$f")
    if [ "$d" == "." ]; then
        fp=$(pwd)/$f
    else
        fp=$d/$(basename "$f")
    fi
    fif=~/.local/share/Trash/info/$(basename "$f").trashinfo
    echo "[Trash Info]" >"$fif"
    echo "Path=$fp" >>"$fif"
    echo "DeletionDate=$(date +%Y-%m-%dT%H:%M:%S)" >>"$fif"
    mv "$f" ~/.local/share/Trash/files
done

Natürlich wäre auch das Wiederherstellen der Dateien aus dem Papierkorb auf diesem Weg denkbar, aber sicher nicht wirklich hilfreich.


Dieser Artikel wurde in der/den Kategorie(n) Planet-U, Praxis, Programmierung und Skripting veröffentlicht und mit den Tags , versehen.

11 Kommentare zu Shell: In den Papierkorb verschieben

  1. Kommentar von Klaus Schwarzkopf
    14. September 2012, 11:35 Uhr.

    Hast Du schon trash-cli ausprobiert?
    Siehe: http://wiki.ubuntuusers.de/GNOME_M%C3%BClleimer

  2. Kommentar von FERNmann
    14. September 2012, 12:10 Uhr.

    Installier mal ds Paket trash-cli, das die Befehle trash-put, trash-empty, trash-list und restore-trash bereitstellt. Macht genau das, was du suchst.

  3. Kommentar von Gerald
    14. September 2012, 12:19 Uhr.

    Danke euch beiden für den Hinweis. Kannte ich nicht – aber ich bin halt Programmierer und bastel auch gerne selbst… :)

  4. Kommentar von Leszek
    14. September 2012, 19:32 Uhr.

    Ich finde das ehrlich gesagt mit Hilfe eines Shellskriptes etwas besser gelöst, als eine ganze Python Abhängigkeit für so etwas zu haben (wie bei trash-cli).

    Unter was für einer Lizenz steht eigentlich dein Code ?
    Kann das einfach so verwendet werden oder willst du da irgendwelche Attribution, wenn ich das z.B. in eine Linux Distri übernehme ?

    • Kommentar von Gerald
      14. September 2012, 20:03 Uhr.

      Was meinst du denn mit „in eine Linux-Distri übernehmen“ genau? Namensnennung wäre schon schön. Das, was ich sonst so zum Download anbiete, habe ich ja jeweils unter GPL gestellt…
      BTW: danke für deinen erfreulichen Kommentar… :)

      • Kommentar von Leszek
        15. September 2012, 09:06 Uhr.

        Ich könnte mir vorstellen dieses Script in das Paket neptune-scripts, aus der Neptune Distribution, zu integrieren. Es würde dann standardmäßig mit dem Namen „remove“ aufgerufen werden können.
        In neptune-scripts finden sich einige scripts, die das Arbeiten auf der Shell unter Neptune ein wenig komfortabler gestalten. (z.B. ein script zum Entfernen von alten Kernelpaketen uva.)

        • Kommentar von Gerald
          15. September 2012, 09:43 Uhr.

          Würde ich natürlich begrüßen. Ist dann die GPL Ok?

  5. Kommentar von Alex
    16. September 2012, 13:06 Uhr.

    Ohne das böse zu meinen, aber dein Script hat einige gefährliche Bugs:
    – Verwendet $* statt $@, probier mal aus was passiert wenn ein Argument Whitespace enthält (Sicherheitsrelevant)
    – Kein Quoting der Variablen, wieder Probleme mit Whitespace (Sicherheitsrelevant)
    – Keine explizite Trennung von Parameter und Argumenten. Was passiert wenn eine Datei einfach „-f“ heißt? Nimm hier explizit „–“ sonst hast du auch hier eine ernste Sicherheitslücke!
    – Statt der dirname Magie könntest du auch einfach readlink nehmen
    – Statt der Date Magie könntest du auch einfach date –iso-8601=seconds nehmen

    • Kommentar von Gerald
      16. September 2012, 17:52 Uhr.

      Hallo Alex,
      kein Problem. Deine/solche Kritik nehme ich gerne an. Zumal ich die ersten beiden Punkte hätte wissen müssen. Das habe ich korrigiert. Bzgl. Datei namens -f weiß ich aber ehrlich gesagt nicht so ganz, wie ich das Skript ändern müsste.
      Danke und Gruß, Gerald

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>