Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[TIP] il cestino per la shell!!! aka shellTrash
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
RollsAppleTree
Guru
Guru


Joined: 18 Feb 2005
Posts: 340
Location: Sicilia - Catania

PostPosted: Thu Mar 22, 2007 2:41 pm    Post subject: [TIP] il cestino per la shell!!! aka shellTrash Reply with quote

Quante volte avrete detto:

Quote:
porca misera, ho cancellato dei file importantissimi!!! Adesso come li recupero???


Se li avete cancellati via interfaccia grafica, nessun problema… li avete nel cestino…

Ma se li avete cancellati via linea di comando???

Stavo lavorando alla mia tesi, ed ero anche arrivato ad un buon punto, quando -PORCA MISERIACCIA- un “rm” malandrino mi ha cancellato dei file importantissimi!!!
SCONFORTO E TERRORE !!!
Per questo mi sono deciso a scrivere questo piccolo scriptino che crea un “cestino” anche per i files cancellati da riga di comando, per intenderci, con il solito “rm” …

eccolo:
no-rm.sh
Code:

#!/bin/bash
touch .tmpListaFinale # file temporaneo di appoggio, metterò li la lista di switch legali del mio fake-rm
for comandi in $*
do
if [ $comandi != '-rf' ]
then
echo -n $comandi >> .tmpListaFinale # se è diverso da "-r" lo metto nella lista
echo -n " ">>.tmpListaFinale # poi metto uno spazio
else
echo -n " -f ">>.tmpListaFinale
fi
done
echo "eseguo: mv" `cat .tmpListaFinale` nel cestino# echo di debug
mv `cat .tmpListaFinale` ~/.Trash # rimuovo il file temporaneo

Veramente semplice, no?

Non fa altro che leggere il vostro comando, controllare che non ci siano dei “-r” tra gli switch (per la cancellazione ricorsiva, il comando mv non ha questo switch, e darebbe errore) e trasforma il tutto in un bel mv…
Ovvero sposta i files nel cestino (si, proprio così, nel cestino del vostro desktop) !!!

Diamo i permessi di esecuzione allo script:
Code:
chmod +x no-rm.sh


Adesso non ci resta che fare un bell’alias …
Code:
nano ~/.bashrc


in maniera tale che ogni volta che scriviamo “rm” invece mandi inesecuzione il nostro script:
Code:
alias rm='/home/$USER/no-rm.sh'


Ed il gioco dovrebbe essere fatto :D

N.B. E’ ovvio che questo script sarebbe potuto essere scritto meglio, ma il mio intento era solo quello di sbrigarmi nel farlo e soprattutto di rendere trasparente all’utente l’utilizzo dell’alias.
In ogni caso funziona perfettamente :D

Altri script simili:

http://poetry.freaknet.org/poetryminihowto/buttiamo_linux_ram
http://www.debianitalia.org/modules/wfsection/article.php?articleid=78
http://www.lugnu.it/index.php?option=com_content&task=view&id=73&Itemid=2

credits: my blog!!! :D
http://rollsappletree.altervista.org/2007/03/20/ecco-il-cestino-per-la-tua-bash/
_________________
RollsAppleTree BLOG !!!
Documentazione in Italiano su Gentoo
F.A.Q. in Italiano su Gentoo
Back to top
View user's profile Send private message
Guglie
Apprentice
Apprentice


Joined: 01 Mar 2004
Posts: 240
Location: switzerland - zürich

PostPosted: Sat Mar 24, 2007 12:50 pm    Post subject: Re: [TIP] il cestino per la shell!!! aka shellTrash Reply with quote

un po' di consigli:

Code:
if [ $comandi != '-rf' ]

mv non ha l'opzione di ricorsività (visto che sposta direttamente tutte le sottodirectory), che però si può passare
con in 3 modi (-r, -R, --recursiv).
inoltre l'opzione -r la si può passare attaccata ad altre (rm -rf name_dir) oppure singolarmente (rm -r -f name_dir)

perciò ti consiglio di usare un parser degli argomenti (come getopt) per togliere in modo più pulito -r

Code:
mv `cat .tmpListaFinale` ~/.Trash # rimuovo il file temporaneo

nemmeno questo è molto pulito: se hai una partizione per /home e un'altra per / e cancelli un file che non è nella home del tuo utente il file viene prima copiato sull'altra partizione e poi cancellato. freedeskotp prevede una directory /.Trash per questi casi

se hai voglia di perfezionarlo ti consiglio di leggere le specifiche di freedesktop per l'implementazione di Trash
_________________
A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath!
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4809
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Tue Mar 27, 2007 3:35 am    Post subject: Re: [TIP] il cestino per la shell!!! aka shellTrash Reply with quote

RollsAppleTree wrote:

Code:
alias rm='/home/$USER/no-rm.sh'


ma adesso, se l'utente vuole vuotare il cestino, che comando usa?

inoltre. c'è una ragione per generare un file temporaneo listafinale?
mi sembra che tu non cancelli quel file ( touch è diverso da > ) e accedi ad esso in append, in modo che al secondo accesso rimane memoria del primo.
io avrei preferito una variabile interna, che funziona in questo modo:
Code:

cloc3@s939 ~/prova $ cat listaFinale.sh
#!/bin/bash
listaFinale=""
for comandi in $*; do
 listaFinale=${listaFinale}" "$comandi
done
echo $listaFinale

_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
RollsAppleTree
Guru
Guru


Joined: 18 Feb 2005
Posts: 340
Location: Sicilia - Catania

PostPosted: Tue Mar 27, 2007 4:15 pm    Post subject: Re: [TIP] il cestino per la shell!!! aka shellTrash Reply with quote

cloc3 wrote:
RollsAppleTree wrote:

Code:
alias rm='/home/$USER/no-rm.sh'


ma adesso, se l'utente vuole vuotare il cestino, che comando usa?


tasto destro-> svuota cestino :D

cloc3 wrote:

inoltre. c'è una ragione per generare un file temporaneo listafinale?
mi sembra che tu non cancelli quel file ( touch è diverso da > ) e accedi ad esso in append, in modo che al secondo accesso rimane memoria del primo.
io avrei preferito una variabile interna, che funziona in questo modo:
Code:

cloc3@s939 ~/prova $ cat listaFinale.sh
#!/bin/bash
listaFinale=""
for comandi in $*; do
 listaFinale=${listaFinale}" "$comandi
done
echo $listaFinale

ehmmm ... non sapevo come concatenare variabili interne .... :D

cmq continuiamo a suggerire, così ne facciamo na versione bellina (ovvero ben lontana dalla mia :D )... è veramente na seccatura quando nella cancellazione spasmodica via shell facciamo fuori cose importanti ...[/quote]
_________________
RollsAppleTree BLOG !!!
Documentazione in Italiano su Gentoo
F.A.Q. in Italiano su Gentoo
Back to top
View user's profile Send private message
cloc3
Advocate
Advocate


Joined: 13 Jan 2004
Posts: 4809
Location: http://www.gentoo-users.org/user/cloc3/

PostPosted: Tue Mar 27, 2007 8:51 pm    Post subject: Re: [TIP] il cestino per la shell!!! aka shellTrash Reply with quote

RollsAppleTree wrote:

tasto destro-> svuota cestino :D

:D
perfetto. da console. incrocio le dita che Kde non abbia definito anche lui l'alias nel proprio environment.
in tal caso puoi sempre loggarti da root ... :D .
RollsAppleTree wrote:

cmq continuiamo a suggerire

bè, il consiglio migliore viene da Guglie.
per il resto, man bash.
_________________
vu vu vu
gentù
mi piaci tu
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum