Tak tohle je moje reseni. Neni to dozajista dokonale, ale lepsi nez dratem do oka (nez bude v Nautilu implementovano Undo). Obnovuje pouze polozky z kose "~/.Trash". Nedovede obnovovat polozky z jinych kosu, treba tech na vymennych discich, jelikoz z duvodu jineho filesystemu nemusi byt datum ctime dostupne ci spravne.
Postup je nasledujici:
Nejdrive je treba vytvorit dva skripty. Budu predpokladat, ze jsou umisteny v adresari "bin" ve vasem domovskem adresari. Ten pripadne vytvorite prikazem
mkdir ~/bin
V tomto adresari (~/bin) vytvorte soubor "new_in_trash.py". Jedna se o skript, ktery na obrazovku vypise seznam posledne smazanych souboru (nejcerstvejsich polozek v kosi). Do souboru vlozte nasledujici obsah (mezery ve zdrojovem kodu jsou nanejvis dulezite, odsazeni musi zustat zachovano).
#!/usr/bin/python
# program vypise nejcerstveji pridane polozky v kosi (~/.Trash)
import os
import sys
import shutil
# cesta ke kosi
kos = os.path.expanduser("~/.Trash")
# funkce na porovnavani souboru podle casu ctime
def ctime_compare(x, y):
if dic_ctimes[x] > dic_ctimes[y]:
return -1
elif dic_ctimes[x] < dic_ctimes[y]:
return 1
else:
return 0
# nactu obsah kose
obsah_kose = os.listdir(kos)
# pokud je kos prazdny, koncim
if not obsah_kose:
#print "prazdny kos"
sys.exit(0)
# ulozim si do slovniku ctime casy kazde polozky v kosi
dic_ctimes = {}
for soubor in obsah_kose:
info = os.lstat(os.path.join(kos, soubor)) # pomoci join vytvorim plnou cestu k souboru
dic_ctimes[soubor] = info.st_ctime
# setridim polozky v kosi sestupne posle ctime
obsah_kose.sort(ctime_compare)
# nyni budu prochazet polozky v kosi jednu po druhe a budu je
# presouvat do seznamu polozek urcenych k obnoveni tak dlouho, dokud
# rozdil jejich ctime casu je maximalne jedna vterina
# bohuzel jedna vterina je maximalni rozlisovaci schopnost
rozsah_ctime = 1
polozky_k_obnoveni = [obsah_kose[0]]
i = 1
while (i < len(obsah_kose)) and (dic_ctimes[obsah_kose[i-1]]<=(dic_ctimes[obsah_kose[i]]+rozsah_ctime)):
polozky_k_obnoveni.append(obsah_kose[i])
i += 1
# nyni jiz znam polozky, ktere obnovim
for soubor in polozky_k_obnoveni:
print os.path.join(kos, soubor)
Nasledne skriptu nastavime spustitelny priznak
chmod u+x ~/bin/new_in_trash.py
Vyzkousejte pripadne cinnost tohoto skriptu.. Smazte v Nautilu nejaky soubor a spustte skript.
~/bin/new_in_trash.py
Mel by vypsat na obrazovku tento smazany soubor. Pozor, z kose jej neobnovi, to udelame dale.
Pokud skript funguje, vytvorte v adresari "~/bin" dalsi soubor s nazvem "remove_from_trash.sh" a vlozte do nej nasledujici obsah
#!/bin/bash
folder=`echo $NAUTILUS_SCRIPT_CURRENT_URI | cut -c 8-`
cd "$folder"
~/bin/new_in_trash.py | while read soubor; do mv "$soubor" .; done
Take tento soubor udelame spustitelnym
chmod u+x ~/bin/remove_from_trash.sh
Tento skript samotny nespoustejte, ocekava, ze bude spousten Nautilem (tedy promenna $NAUTILUS_SCRIPT_CURRENT_URI bude nastavena).
Nakonec jeste pridame do kontextove nabidky Nautila polozku spoustejici tento skript. Vytvorime v adresari " ~/.gnome2/nautilus-scripts/" nasledujici symbolicky link:
Pro anglicky napis v kontextove nabidce treba
ln -s ~/bin/remove_from_trash.sh ~/.gnome2/nautilus-scripts/remove_from_trash
Pro cesky napis v kontextove nabidce treba
ln -s ~/bin/remove_from_trash.sh ~/.gnome2/nautilus-scripts/obnovit_z_kose
V kontextove nabidce Nautila (pravy klik) je nyni polozka Skripty -> remove_from_trash resp. obnovit_z_kose, ktera zpusobi obnoveni posledne smazanych polozek z kose do aktualniho adresare.