#1 Le 27/04/2008, à 04:28
- 3po
Restaurer les éléments de la corbeille dans Hardy Heron
Bonjour,
Comme vous le savez peut-être l'emplacement de la corbeille à été modifiée et cet emplacement contient les informations qui peuvent permettre la restauration des éléments.
Je ne sais pas s'il y a d'autres solutions déjà disponibles mais j'ai concocté un script python qui combiné à nautilus-actions permet de restaurer les éléments de la corbeille directement dans Nautilus.
Alors pour cela commencez par installer nautilus-actions.
Créez un fichier "restaurer.py" (n'oubliez pas de donner les droits d'exécution) dans lequel vous mettrez ceci :
#!/usr/bin/env python
import sys,urllib,user,re,os
if len(sys.argv) != 2:
exit(1)
fichier = urllib.unquote(sys.argv[1][10:])
finfo=user.home+"/.local/share/Trash/info/"+fichier+".trashinfo"
info=open(finfo,"r")
os.renames(user.home+"/.local/share/Trash/files/"+fichier,re.search("^Path=(.*)$",info.read(),re.M).group(1))
info.close()
os.remove(finfo)
Ensuite allez dans Système -> Préférences -> Configuration des actions de Nautilus -> Ajouter
Dans Libéllé et Infobulle mettez "Restaurer l'élément".
(Pour l'icône ce que vous voulez.)
Dans Chemin, mettez le chemin vers le fichier "restaurer.py".
Dans Paramètres, mettez "%u".
Passez à l'onglet Conditions, sélectionnez "Les deux" et décochez "Apparaît si la sélection contient plusieurs fichiers ou dossiers"
Enfin dans l'onglet Conditions avancée, décochez "file" et ajoutez le protocole "trash" en appuyant sur le + puis sur "nouveau" pour éditer le nom du protocole et sur "Description du nouveau protocole" pour mettre "Fichiers de la corbeille".
Cliquez sur valider.
Voilà après ça vous devriez voir "Restaurer un élément" apparaître dans le menu lorsque vous faîtes un clic droit sur l'un des éléments de la corbeille (Il vous faudra peut-être ré-ouvrir la session pour que nautilus-actions soit pris en compte après l'installation).
Théoriquement ça marche bien hormis parfois lorsque deux fichiers se nomment pareil et peut-être d'autres cas tordus.
Si vous avez des questions ou remarques pour améliorer mon script n'hésitez pas .
(Oula il est déjà 5h26 j'ai pas vu le temps passer à faire mon petit bout de code )
Hors ligne
#2 Le 27/04/2008, à 20:41
- yurek
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Peut tu expliquer chaque ligne notamment la fin stoplais ?
Je me demande si en shell on peu pas faire la meme chose ?
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#3 Le 27/04/2008, à 21:56
- 3po
Re : Restaurer les éléments de la corbeille dans Hardy Heron
À la base j'avais fait un script bash mais il me manquait un truc c'est la fonction "unquote". J'explique :
J'ai en paramètre de mon script une URL de cette forme : trash:///_nom%20du%20fichier
Les "%20" représente des espaces dans une URL et certains autres caractères comme les accents sont de la même forme.
Donc pour traiter ces caractères j'ai besoin d'une fonction spécifique que j'ai retrouvé en python (qui existe aussi en perl) mais qui n'existe pas à priori en shell d'après mes recherches.
Pour cette ligne :
fichier = urllib.unquote(sys.argv[1][10:])
donc je supprime les 10 premiers caractères ("trash:///_") et je traite les caractères spéciaux.
finfo=user.home+"/.local/share/Trash/info/"+fichier+".trashinfo"
Cette ligne est le chemin vers le fichier contenant les informations sur le fichier à récupérer (dont le chemin d'origine donc).
info=open(finfo,"r")
Cette ligne ouvre ce fichier en lecture.
os.renames(user.home+"/.local/share/Trash/files/"+fichier,re.search("^Path=(.*)$",info.read(),re.M).group(1))
Cette ligne correspond à la commande mv qui va du fichier dans la corbeille vers le chemin d'origine récupéré dans le fichier ouvert précédemment grâce à une expression régulière.
info.close()
Cette ligne ferme le fichier ouvert.
os.remove(finfo)
Cette ligne supprime le fichier qui contient les informations car il n'est plus utile.
Maintenant si tu as une autre idée pour traiter l'URL dans un shell je peux le refaire en shell si tu veux mais sinon en attendant un script python me paraît plus approprié.
Hors ligne
#4 Le 27/04/2008, à 23:37
- yurek
Re : Restaurer les éléments de la corbeille dans Hardy Heron
en bash avec nautilus script ca donne ca :
#!/bin/bash
NOM=`echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sed s/"\/"/"\n"/g |cat | tail -n1`
# ANCIEN_NOM=`cat "$HOME/.local/share/Trash/.trashinfo" |grep Path | sed s'/Path=//' | sed s/"\/"/"\n"/g |cat | tail -n1`
ANCIEN_NOM=`cat "$HOME/.local/share/Trash/info/$NOM.trashinfo" |grep Path | sed s'/Path=//' | sed s/"\/"/"\n"/g |cat | tail -n1`
CHEMIN=`cat "$HOME/.local/share/Trash/info/$NOM.trashinfo" |grep Path | sed s'/Path=//' | sed s"/$NOM//"`
zenity --info --text="$CHEMIN |||| $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ||| $NOM | $ANCIEN_NOM."
#mv "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" "$CHEMIN"
#rm "$HOME/.local/share/Trash/info/$NOM.trashinfo"
mais ca ne marche que en ligne de commande si on défini nautilus_scrit... a la main, je comprend pas
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#5 Le 02/05/2008, à 23:42
- erlik
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Hello
Sympa le script. Mais comment restaurer plusieurs fichiers selectionnés ? il suffirait d'une boucle ds le script, non?
Je ne suis pas un geek! Je suis un être humain!
Hors ligne
#6 Le 03/05/2008, à 12:05
- 3po
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Je l'aurais bien fait pour plusieurs fichiers sélectionnés si j'avais réussi à récupérer plus que l'URL du premier fichier sélectionné avec nautilus-actions. Sinon oui il aurait suffit de faire une boucle.
Hors ligne
#7 Le 03/05/2008, à 15:25
- yurek
Re : Restaurer les éléments de la corbeille dans Hardy Heron
personne ne sais pour mon script , je trouve pas mon erreur !
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#8 Le 03/05/2008, à 22:55
- 3po
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Bon j'avais jamais fait de scripts pour Nautilus avant mais j'ai trouvé l'erreur. Apparemment les scripts pour nautilus-script-manager comme avec nautilus-actions ne gèrent pas les chemins directs vers la corbeille mais seulement les URL (trash:///_nom%20du%20fichier) avec le protocole trash://. Donc la seule solution est de récupérer les URL avec la constante NAUTILUS_SCRIPT_SELECTED_URIS pour nautilus-script-manager.
Hors ligne
#9 Le 04/05/2008, à 19:35
- yurek
Re : Restaurer les éléments de la corbeille dans Hardy Heron
ayé
#!/bin/bash
# version 1.0.0
# licence GPL v3
function deplacer {
mv "$HOME/.local/share/Trash/files/$NOM" "$CHEMIN/$NOUVEAU" | zenity --progress --auto-close
rm "$HOME/.local/share/Trash/info/$NOM.trashinfo"
}
function annuler {
if [ "${PIPESTATUS[0]}" != "0" ]; then
exit
fi
}
SAUV=`echo "$NAUTILUS_SCRIPT_SELECTED_URIS" | sed s'/%20/ /g'`
NOM=`echo "$SAUV" |sed s'/\//\n/g'| tail -n1 | sed s'/_//'`
if [ -f "$HOME/.local/share/Trash/info/$NOM.trashinfo" ]; then
# ANCIEN_NOM="`cat "$HOME/.local/share/Trash/info/$NOM.trashinfo" |grep Path | sed s'/Path=//' | sed s/"\/"/"\n"/g |cat | tail -n1`"
CHEMIN="`cat "$HOME/.local/share/Trash/info/$NOM.trashinfo" |grep Path | sed s'/Path=//' | sed s"/$NOM//"`"
# EXISTE="`cat "$HOME/.local/share/Trash/info/$NOM.trashinfo" |grep Path | sed s'/Path=//'`"
NOUVEAU=$NOM
while [ -f "$CHEMIN$NOUVEAU" ];
do
CHOIX=X;
zenity --error --text="Le fichier \" $NOUVEAU \" existe"
CHOIX=$(zenity --list --checklist --width=400 --height=180 \
--column "Selection" --column "A/B" --column "Choix" \
--title="Choix de restauration" \
--text="Que voulez vous Faire?" \
--hide-column="2" \
TRUE "A" "Renomer le fichier a restaurer" \
FALSE "B" "Changer le repertoire de restauration" \
FALSE "C" "Ecraser le fichier existant")
annuler
echo "$CHOIX" | grep "A" >/dev/null
if [ "$?" = 0 ] ; then
NOUVEAU="`zenity --entry --title="Renomer le fichier" --text="Entrer le nouveau nom du fichier à restaurer" --entry-text="$NOUVEAU"`"
annuler
fi
echo "$CHOIX" | grep "B" >/dev/null
if [ "$?" = 0 ] ; then
CHEMIN="`zenity --file-selection --directory --title="Selection du dossier de restauration"`"
annuler
fi
echo "$CHOIX" | grep "C" >/dev/null
if [ "$?" = 0 ] ; then
break;
fi
done
deplacer
else
zenity --error --text="Impossible de restaurer le fichier"
CHEMIN="`zenity --file-selection --title="Selection du dossier de restauration"`"
annuler
deplacer
fi
exit 0;
Dernière modification par yurek (Le 04/05/2008, à 23:10)
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#10 Le 04/05/2008, à 20:55
- atlas95
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Magnifique !
Merci c'est énorme !
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#11 Le 04/05/2008, à 21:05
- atlas95
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Eu, le python marche bien et le bash a l'air de déconner
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#12 Le 04/05/2008, à 21:29
- FestinMWM
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Sous xfce (xubuntu), la fonction "restaurer" existe.
Vous pourriez prendre exemple. Le gestionnaire de fichier est thunar.
Dapper-->Edgy-->Feisty-->Gutsy-->Hardy-->Ibby-->Jaunty-->Karmic> Mint LXDE sur PC de 2001 AMD 800 MHz, 1024Mo RAM, 9 Go linux, geforce old 4200
La liberté, c'est ce que permet la longueur de la laisse.
Hors ligne
#13 Le 04/05/2008, à 23:10
- yurek
Re : Restaurer les éléments de la corbeille dans Hardy Heron
c'est bon ca ne bug plus
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#14 Le 05/05/2008, à 00:32
- 3po
Re : Restaurer les éléments de la corbeille dans Hardy Heron
sed s'/%20/ /g'
Ça ne suffit pas, ça aurait été trop facile lol. Tu ne gères pas du tout les caractères accentués et autres caractères spéciaux de cette façon et c'est pour ça que j'ai fait mon script en python qui permet de faire ça proprement.
Maintenant, ton script propose une interface graphique mais je comprends pas pour quoi faire . Tu peux expliquer ?
Pour Thunar, j'étais pas au courant mais de toute façon le code source de Thunar est un peu trop gros pour que je fouille dedans .
Hors ligne
#15 Le 05/05/2008, à 00:41
- yurek
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Non ca vient de nautilus script qui ne renvoie pas des espaces mais un %20, sinon il suffit de tout mettre dans des cote ( ' ' ) pour sauvegarder.
Le python je regarde un peu mais bon.
Une interface au cas ou le fichier existerait, renommer ... bref c'est plus une fonctionnalité pour moi.
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#16 Le 05/05/2008, à 00:53
- 3po
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Nonon ça ne vient pas de nautilus script c'est comme ça dans toutes les URL, essaye de restaurer un fichier avec des accents... Il n'y a pas que les espaces qui sont remplacés.
Hors ligne
#17 Le 05/05/2008, à 01:00
- yurek
Re : Restaurer les éléments de la corbeille dans Hardy Heron
oui je viens de remarquer, je suis en train de chercher la fiente.
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#18 Le 05/05/2008, à 01:36
- yurek
Re : Restaurer les éléments de la corbeille dans Hardy Heron
j'ai trouvé ceci ici =>https://www.dg-sc.org/phrack-fr/phrack-fr/phrack49-fr/NR2-09.txt
# Traitement des valeurs entrees
{$NAME, $VALUE) = split(/=/, $_); # separer l'entree sous la forme
# variable=valeur
$VALUE =~ s/\+/ /g; # Remplacer "+" par " "
$VALUE =~ s/%([0-9|A-F]{2})/pack(C,hex,{$1}}/eg; # Remplacer les caracteres
# %xx par leurs valeurs ASCII
# Virer les caracteres a echapper
$VALUE =~ s/([;<>\*\|'&\$!#\(\)\[\]\{\}:"])/\\$1/g;# Enlever les caracteres
# non voulus
$MYDATA[$NAME} = $VALUE; # Assigner la valeur a son tableau associe
aussi
grep '<location>' $fichtxt | sed 's/ //g'| sed -e 's/<location>file:\/\///' | sed -e 's/<\/location>//' | perl -pe 's|%([0-9a-f]{2})|pack('C',hex($1))|segi;' > $ListeTxt
Dernière modification par yurek (Le 05/05/2008, à 01:53)
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#19 Le 05/05/2008, à 07:22
- 3po
Re : Restaurer les éléments de la corbeille dans Hardy Heron
s/%([0-9|A-F]{2})/pack(C,hex,{$1}}/eg
Si cette expression régulière fonctionne, c'est bon.
s/\+/ /g
Celle-ci est fausse car elle ne s'applique qu'aux URL de type http.
J'essayerai ce soir.
Hors ligne
#20 Le 07/11/2008, à 22:58
- arnaud_d
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Bonsoir,
En voulant désindexer toute ma musique sous Rythmbox j'ai mis à la poubelle tous mes fichiers musicaux.
J'ai regardé les scripts que vous proposez et j'ai pas trouvé mon bonheur. Alors j'ai fait mon petit script à ma sauce et je voudrais le partager, le soumettre aux critiques...
Merci
#!/usr/bin/env python
# -*- coding:Utf-8 -*-
# Restaurateur de corbeille
# arnaud_d
from os import listdir,system
from urllib import unquote
directory = "/media/sda6/bordel"
list_files = listdir(directory+'/files')
for music_file in list_files:
info = open(directory+'/info/'+music_file+'.trashinfo')
path2 = info.readlines()[1]
path2 = path2[5:len(path2)-1]
path2 = unquote('/media/sda6/' + path2)
path1 = unquote(directory + "/files/" + music_file)
command = 'mv "%s" "%s"' % (path1,path2)
system(command)
info.close()
PS : par précaution j'avais fait une copie de mon fichier corbeille dans /sda6/bordel
Oui parce que pour info mes fichiers étaient dans une partition, pas dans mon home...
Dernière modification par arnaud_d (Le 08/07/2009, à 19:18)
Hors ligne
#21 Le 08/11/2008, à 00:56
- 3po
Re : Restaurer les éléments de la corbeille dans Hardy Heron
À la base je voulais juste faire un script utilisable dans Nautilus Actions pour restaurer les éléments de la corbeille directement dans Nautilus, du coup c'est normal que ça ne corresponde pas à ton problème.
Je pense qu'il manque juste la suppression du fichier .trashinfo à la fin de ta boucle (il n'a plus de raison d'être une fois le fichier restauré).
Voilà mon script modifié (testé pour intrepid) :
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys,urllib,user,re,os
if len(sys.argv) == 1 :
repertoire = user.home+"/.local/share/Trash"
elif len(sys.argv) == 2 :
repertoire = sys.argv[1]
else:
exit(1)
for fichier in os.listdir(repertoire+'/files'):
finfo=repertoire+"/info/"+fichier+".trashinfo"
info=open(finfo,"r")
os.renames(repertoire+"/files/"+fichier,urllib.unquote(re.search("^Path=(.*)$",info.read(),re.M).group(1)))
info.close()
os.remove(finfo)
Sans arguments ça restaurera tous les éléments de l'emplacement de la corbeille par défaut et si on lui met un nom de dossier ça restaurera tous les éléments situé à l'emplacement de ce dossier (par exemple : "./restaurer.py /media/sda6/bordel").
Hors ligne
#22 Le 08/11/2008, à 01:15
- arnaud_d
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Merci 3po pour ta réponse. Même si je le maitrise pas encore la ligne
os.renames(repertoire+"/files/"+fichier,urllib.unquote(re.search("^Path=(.*)$",info.read(),re.M).group(1)))
(mais je pense que j'y viendrais à bout après deux trois recherches sur la fonction search et sur group), il me semble que ton script est bien mieux ficelé et propre que le miens.
Je vais me le garde de côté...
Tout de même, ils pourraient mettre cette option par défaut sur Gnome non ? C'est pas dûr ! Enfin ça se trouve c'est fait sur Intrepid, je sais pas si une nouvelle version de Gnome est disponible...
Bonne nuit !
Hors ligne
#23 Le 08/11/2008, à 01:22
- 3po
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Oui c'est déjà fait sur Intrepid, il suffit de sélectionner les éléments et de faire un clic droit -> "Restaurer", sur Hardy ils avaient seulement changé l'emplacement de la corbeille et ajouté les informations pour la restauration.
Pour search et group il s'agit d'une recherche de chaine par expression régulière, en résumé dans "^Path=(.*)$"
^ début de ligne
Path= la chaine "Path="
( une parenthèse indiquant le début d'un groupe
. représente n'importe quel caractère
* indique que le symbole précédent (le .) peut avoir entre 0 et n occurences
) la fin du groupe
$ fin de ligne
re.M indique que l'on recherche dans toutes les lignes
group(1) indique qu'on veut récupérer le premier groupe (il n'y en a qu'un seul donc 1)
Dernière modification par 3po (Le 08/11/2008, à 01:28)
Hors ligne
#24 Le 05/01/2010, à 13:40
- mfrerebeau
Re : Restaurer les éléments de la corbeille dans Hardy Heron
Bonjour,
Je viens d'installer Hardy et j'ai été très surpris par la non présence de l'option de restauration de la corbeille (j'avais installé intrepid avant).
Je vous remercie donc beaucoup pour ce petit script qui résout le problème !
3po a parlé de la constante NAUTILUS_SCRIPT_SELECTED_URIS qui pourrait permettre de gérer plusieurs fichiers sélectionnés dans la corbeille...
Je suppose que cela donne une chaine de caractères avec tous les arguments séparés par des espaces... Si cela est juste, il suffirait de récupérer chaque éléments de la chaine dans un tableau (equivalent d'un explode PHP) et de faire une boucle sur ce dernier pour appliquer le script à chaque élément...
J'ai bien compris le fonctionnement du script mais j'ai aucune connaissance en python...
Si quelqu'un pouvait me fournir les quelques infos manquantes pour réaliser cette boucle ce serait super cool
Dernière modification par mfrerebeau (Le 05/01/2010, à 13:42)
Seul on va plus vite, ensemble on va plus loin...
-
Lucid Lynx
Hors ligne