Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"  (Přečteno 8919 krát)

oox

  • Návštěvník
  • Příspěvků: 10
Ve windovsech to byla šikovná věcička. Pokud jsem něco nedopatřením smazal a neměl jsem čas se prohrabovat v přeplněném koši, jednoduše to řešilo pravé tlačítko myš + nabídka zpět odstranit.

Podobná věcička mi ale na Ubuntu 7.10 chybí. Nevíte někdo o náhražce či podobné funkci?
« Poslední změna: 18 Ledna 2008, 11:42:11 od Anna Taliánová »

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit".
« Odpověď #1 kdy: 15 Ledna 2008, 11:21:21 »
Hm, predpokladam, ze mas na mysli Nautilus. Tam bohuzel zadne "undo" zatim neni, ikdyz pravdepodobne se na nem pracuje, viz http://live.gnome.org/Nautilus/Undo

Nevim, jestli se mazani nekde loguje. Ale napadl me takovy workaround. Snad by se dalo vyuzit data "ctime" - datum posledni zmeny informaci souboru (ctime se meni napr. pri presunu souboru, tedy pri jeho "vymazani/presunuti do kose"). Pokud bychom obsah kose seradili podle tohoto data, bude nahore soubor, ktery byl presunut jako posledni. V konzoli takove razeni dela prikaz
Kód: [Vybrat]
$ ls -c ~/.Trash
Pak by slo tento soubor opet presunout do aktualniho adresare. Toto cele by zajistil nejaky program.
Tento pristup ma ale nekolik problemu:
1. jak zjistit aktualni adresar otevreny v Nautilu, resp. jak tento program do Nautila integrovat (bez uprav a kompilace)? Toto je nutne pro presunuti souboru zpet, musim totiz vedet, kam jej mam vratit.
2. Smazat jsem mohli vice souboru najednou, ale jak to poznat? Moznosti by bylo "vracet" soubory v danem rozmezi casu ctime - napriklad vracet soubory tak dlouho, dokud rozdil mezi ctime casy tech "sousednich" neni vetsi nez rekneme vterina, ci jeste lepe desetina vteriny, pokud to jde (bylo by asi nutne vyuzit presnejsiho udaje z ceckovske procedury ctime())

Cili zaver je asi takovy, ze budes muset pockat, az to "undo" vyvojari do nautila zapracuji. :-) A nebo vymenit nautilus za neco jineho.
« Poslední změna: 15 Ledna 2008, 15:20:24 od kkaarreell »

existpierre

  • Host
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit".
« Odpověď #2 kdy: 15 Ledna 2008, 13:35:54 »
celkom dobry napad... Vcera som bezvysledne skusal (v bashi som noob :D) spravit skript, ktory by som potom hodil do priecinka /home/peter/.gnome2/nautilus-scripts

Skoncil som iba pri presuvani do kosa. Chcel som aby sa vytvoril nejaky temporary subor, v ktorom by boli info o naraz zahodenych suboroch ....dalsi skript by ich v cykle obnovil..

tu som skoncil :D

#!/bin/sh

for arg
do
 
filetype=$(file "$arg")

mv "$NAUTILUS_SCRIPT_CURRENT_URI/$filetype" "~/.Trash/$filetype"

done

a neslo mi to, no neviem preco

ale bolo by to neprakticke, lebo namiesto klasickeho delete, by som musel na subor/y davat pravym tlacidlom - scripts - Vymazat :D
« Poslední změna: 15 Ledna 2008, 13:38:14 od existpierre »

charon

  • Aktivní člen
  • *
  • Příspěvků: 244
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit".
« Odpověď #3 kdy: 15 Ledna 2008, 20:54:40 »
Ja jednoducho otvorím kôš,označím a myšou pretiahnem kam ptrebujem!
 ;)
Laptop:  HP510   Ubuntu 10.04 Lucid Lynx LTS
Laptop:  Asus EeePC  Ubuntu 10.04 Lucid Lynx LTS
Desktop: Ubuntu 10.04 Lucid Lynx  LTS

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit".
« Odpověď #4 kdy: 15 Ledna 2008, 21:00:39 »
Ja jednoducho otvorím kôš,označím a myšou pretiahnem kam ptrebujem!
 ;)
To mas bezva. Jeste kdyby to tak bylo to, na co se autor dotazu ptal. ;-)

charon

  • Aktivní člen
  • *
  • Příspěvků: 244
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit".
« Odpověď #5 kdy: 15 Ledna 2008, 21:07:15 »
Máš pravdu,nepochopil som otázku.Ospravedlňujem sa!
 :(
Laptop:  HP510   Ubuntu 10.04 Lucid Lynx LTS
Laptop:  Asus EeePC  Ubuntu 10.04 Lucid Lynx LTS
Desktop: Ubuntu 10.04 Lucid Lynx  LTS

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit".
« Odpověď #6 kdy: 16 Ledna 2008, 13:20:58 »
Tak nasel jsem dva zpusoby, jak pridat polozku do kontextove nabidky v Nautilu, viz http://www.abclinuxu.cz/blog/freshmouse/2007/7/5/185780
a
http://wiki.ubuntu.cz/Nautilus/skripty
Ted uz napsat ten program. Skript v bashi to asi nebude, protoze tam zrejme neni moznost, jak zjistit ctime dostatecne presnem rozliseni.

UPDATE! Tak skript uz jsem taky vyresil (v pythonu). Pracuje vyse popsanym zpusobem a obnovuje soubory s presnosti ctime v rozsahu 1 vterina (presneji to nejde).
Reseni ma (bude mit) nasledujici vlastnosti (ponecham na vas, zda nedostatky nebo feature):
- nejcerstvejsi polozky v kosi (tedy ty smazane jako posledni) se obnovi (ci spise receno presunou) do aktualniho adresare, tj. adresare, odkud to spustim pres kontextovou nabidku (k tomuto jsem se jeste nedostal)
- rozsah ctime mezi obnovovanymi soubory je 1 vterina (min to nejde). Cili kdyz smazu deset souboru kazdej po pul vterine, tak to obnovi vsech deset. Kdyby se dal rozdil 0 vterin (tedy ctime obnovovanych souboru by musel byt shodny), mohlo by se stat, ze ackoliv vsech deset (ci spis vice) smazu najednou, jejich ctime cas se bude lisit (to presouvani chvilku trva a muze se to prehoupnout pres hranici vteriny) a pak by se obnovili jen nektere. Proto preferuji ten rozsah 1 vterina.
- pokud obnovim nejnovejsi polozky v kosi a pak obnoveni opakuji, obnovi se dalsi polozky z kose (tohle neni idealni, ale nepokladam to za extra problem a nekdo by to mohl pouzivat jako feature :-) )
« Poslední změna: 17 Ledna 2008, 18:53:56 od kkaarreell »

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit".
« Odpověď #7 kdy: 17 Ledna 2008, 18:53:44 »
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
Kód: [Vybrat]
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).
Kód: [Vybrat]
#!/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
Kód: [Vybrat]
chmod u+x ~/bin/new_in_trash.py
Vyzkousejte pripadne cinnost tohoto skriptu.. Smazte v Nautilu nejaky soubor a spustte skript.
Kód: [Vybrat]
~/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
Kód: [Vybrat]
#!/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
Kód: [Vybrat]
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
Kód: [Vybrat]
ln -s ~/bin/remove_from_trash.sh  ~/.gnome2/nautilus-scripts/remove_from_trash
Pro cesky napis v kontextove nabidce treba
Kód: [Vybrat]
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.
« Poslední změna: 19 Ledna 2008, 15:15:45 od kkaarreell »

dumi

  • Stálý člen
  • **
  • Příspěvků: 1152
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit".
« Odpověď #8 kdy: 18 Ledna 2008, 08:32:45 »
uff, nepridáte to na wiki? znie to zaujímavo.
AMD Sempron 2500+, GF 5200FX, 1,5GB RAM, Ubuntu 8.04

existpierre

  • Host
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #9 kdy: 18 Ledna 2008, 11:47:44 »
Citace
Vyzkousejte pripadne cinnost tohoto skriptu.. Smazte nejaky soubor a spustte skript. Mel by vypsat na obrazovku tento smazany soubor. Pozor, z kose jej neobnovi, to udelame dale.

v konzole som zadal prikaz sh new_in_trash.py , no zmenil sa mi kurzor + vypisovalo to nejake operacie. alebo mi vypisalo

/home/peter/bin/new_in_trash.py: 11: Syntax error: "(" unexpected


kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #10 kdy: 19 Ledna 2008, 09:40:41 »
Citace
konzole som zadal prikaz sh new_in_trash.py , no zmenil sa mi kurzor + vypisovalo to nejake operacie. alebo mi vypisalo

/home/peter/bin/new_in_trash.py: 11: Syntax error: "(" unexpected
Skript mi beha tak, jak je. Tvuj problem je zpusoben spatnym spoustenim. Je to skript v jazyce Python, nemuzes jej (explicitne) predkladat shellu, jelikoz pak se ignoruje prvni radek (#!/bin/bash) a skript se uz nepredlozi spravnemu interpreteru. Spust jej tak, jak je uvedeno v mem prispevku (trochu jsem jej upravil).

existpierre

  • Host
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #11 kdy: 19 Ledna 2008, 10:15:16 »
Jop uz to funguje :), len, ked zadam posledny prikaz, odkaz sa neurobi tam kde ma. urobi sa v ~/bin . Ten odkaz by mal byt v zlozke ~/.gnome2/nautilus-scripts . Inak to v tom menu scripts nebude. Presunul som ho rucne
« Poslední změna: 19 Ledna 2008, 11:02:29 od existpierre »

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #12 kdy: 19 Ledna 2008, 12:23:03 »
Jop uz to funguje :), len, ked zadam posledny prikaz, odkaz sa neurobi tam kde ma. urobi sa v ~/bin . Ten odkaz by mal byt v zlozke ~/.gnome2/nautilus-scripts . Inak to v tom menu scripts nebude. Presunul som ho rucne
Chybicka se vloudila..Dik za upozorneni, opravim.

existpierre

  • Host
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #13 kdy: 19 Ledna 2008, 13:37:48 »
Natrafil som este na maly nedostatok. Po pouziti tejto funkcie, sa uz nemeni ikona z prazdny kos na plny kos. Dal som odstranit subor, bol v kosi, no kos mal ikonu ako prazdny

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #14 kdy: 19 Ledna 2008, 14:40:05 »
Natrafil som este na maly nedostatok. Po pouziti tejto funkcie, sa uz nemeni ikona z prazdny kos na plny kos. Dal som odstranit subor, bol v kosi, no kos mal ikonu ako prazdny
Skript nema zadny vliv na mazani souboru. Pouze je pak z kose presouva zpet.. Ted jsem to zkousel a pri smazani souboru ma muj kos ikonu plneho, po obnoveni souboru opet ikonu prazdneho.

existpierre

  • Host
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #15 kdy: 19 Ledna 2008, 14:46:32 »
Natrafil som este na maly nedostatok. Po pouziti tejto funkcie, sa uz nemeni ikona z prazdny kos na plny kos. Dal som odstranit subor, bol v kosi, no kos mal ikonu ako prazdny
Skript nema zadny vliv na mazani souboru. Pouze je pak z kose presouva zpet.. Ted jsem to zkousel a pri smazani souboru ma muj kos ikonu plneho, po obnoveni souboru opet ikonu prazdneho.

jj, restartol som X a uz to ide ok,..neviem ale preco mi to zblblo  ::)

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #16 kdy: 19 Ledna 2008, 15:26:58 »
Jeste jsem si uvedomil jednu vec, tak aby te to nekdy neprekvapilo. Obnovuje pouze soubory z kose "~/.Trash", nepracuje tedy v pripade kosu napr. na vymennych mediich (flashky,...). Tato media mohou mit jiny souborovy system, ve kterem se hodnota ctime vubec nemusi evidovat. Kdyby nekdo vedel, jak je na tom fat32 resp. fat16 s ctime (jestli tam takova hodnota je evidovana), tak by slo pripadne podporu i pro tyto systemy pridat. Jakys takys zpusob jak tyto kose nalezt vim.
Kód: [Vybrat]
find /media ~ -maxdepth 2 -name '.Trash*' -type d

UPDATE: tak jsem to vyzkousel s flashkou s fat32.. pri smazani souboru (tedy presunuti do /media/disk/.Trash-karel) se udaj ctime nezmeni, zustava hodnota puvodni. Podle toho, co jsem zjistil, tak fat32 uchovava jen cas posledni modifikace (obsahu) souboru. Tim padem to neni pouzitelne, jelikoz se neda zjistit, kdy se polozka do kose dostala. Kdyby mel nekdo nejakej napad...
« Poslední změna: 19 Ledna 2008, 15:51:58 od kkaarreell »

oox

  • Návštěvník
  • Příspěvků: 10
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #17 kdy: 11 Března 2008, 18:10:52 »
Zapomněl jsem poděkovat! I když dočasné, tak je to velice dobré a užitečné řešení. Nevím, jak ostatním, ale mně to čas rozhodně šetří! .. což je rozhodně účel funkce UNDO na jejíž implementaci se těším.

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #18 kdy: 11 Března 2008, 19:02:37 »
Neni zac. Jsem rad, ze jsem pomohl. Jen mi nejde do hlavy, ze to "undo" potrebujete tak casto. :-)

existpierre

  • Host
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #19 kdy: 11 Března 2008, 19:34:54 »
Ja to tiez len obcas pouzivam, lebo vacsinou som si isty subormi, ktore mazem(takze shift+delete), no niekedy davam normalne do kosa, hlavne ked triedim mp3 etc .

existpierre

  • Host
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #20 kdy: 06 Května 2008, 16:08:58 »
V hardy herone tento skript nefunguje. Nedalo by sa to nejak prerobit ak by sa nasiel cas? ::)

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #21 kdy: 06 Května 2008, 18:31:32 »
Prechod na HH jeste odkladam, takze to hned tak nevyzkousim. Ale myslim, ze jsem nekde cetl, ze v HH se presunul kos z ~/.Trash do ~/.local/share/Trash/files, jako je tomu v KDE (nebo tak nejak). Takze bych rekl, ze by na opravu melo stacit jen prepsat v tom skriptu jedno na druhe, hned ze zacatku toho skriptu v pythonu.

Kdyztak dej vedet, jak to vypada, kdyby to jeste nekoho zajimalo.

existpierre

  • Host
Re: Možnost vrátit odstraněný soubor, tzv. "zpět odstranit"
« Odpověď #22 kdy: 06 Května 2008, 18:38:24 »
Jop, odskusane a funguje to. Vdaka :P

 

Provoz zaštiťuje spolek OpenAlt.