Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: oox 15 Ledna 2008, 00:21:15
-
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?
-
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
$ 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.
-
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
-
Ja jednoducho otvorím kôš,označím a myšou pretiahnem kam ptrebujem!
;)
-
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. ;-)
-
Máš pravdu,nepochopil som otázku.Ospravedlňujem sa!
:(
-
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 :-) )
-
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.
-
uff, nepridáte to na wiki? znie to zaujímavo.
-
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
-
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).
-
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
-
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.
-
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
-
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.
-
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 ::)
-
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.
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...
-
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.
-
Neni zac. Jsem rad, ze jsem pomohl. Jen mi nejde do hlavy, ze to "undo" potrebujete tak casto. :-)
-
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 .
-
V hardy herone tento skript nefunguje. Nedalo by sa to nejak prerobit ak by sa nasiel cas? ::)
-
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.
-
Jop, odskusane a funguje to. Vdaka :P