Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile.

(Oula il est déjà 5h26 j'ai pas vu le temps passer à faire mon petit bout de code lol)

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 hmm


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 hmm. 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 smile.

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. smile

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 ! smile

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... sad

Si quelqu'un pouvait me fournir les quelques infos manquantes pour réaliser cette boucle ce serait super cool big_smile

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