web-dev-qa-db-fra.com

Nautilus déplace des éléments dans la corbeille sans demander de confirmation

Comment forcer Nautilus à demander une confirmation oui/non après avoir appuyé sur la touche Suppr?

Je connais les options "Fichiers" -> "Préférences" -> "Comportement": "Demander avant de vider la corbeille ou de supprimer des fichiers", mais cette option est cochée et ne s'applique que si vous videz la Corbeille.

Existe-t-il un moyen d’obtenir une fenêtre de confirmation avant que les fichiers ne soient déplacés vers la corbeille?

Contexte
Le problème majeur que j'ai, c’est que j’appuie parfois accidentellement sur la touche Suppr de mon clavier sans même que je m'en rende compte. Je suis sûr que cela est arrivé et je ne peux pas vivre avec l'idée de regarder dans mon dossier Corbeille pour vérifier si je ne vais pas jeter quelque chose que je ne voulais pas.

3
Adam

Non, Unity ne possède pas de boîte de confirmation de suppression comme Windows. C’est la raison pour laquelle la corbeille existe, donc si vous faites une erreur, vous pouvez la défaire en cliquant sur restaurer.

2
Virusboy

Nautilus ne fournit pas d’option de confirmation: solution?

Le fait que nautilus ne soit pas une option ne signifie pas que vous devez prendre le risque de perdre accidentellement des fichiers si vous appuyez involontairement (et sans être remarqué) sur la touche Entrée.

Vous pouvez simplement exécuter un script en arrière-plan, en gardant un œil sur les actions de suppression, en utilisant trash-cli -tools. Si vous exécutez le script ci-dessous en arrière-plan, deux actions sont mises en place pour empêcher toute suppression inaperçue.

  • Il vous avertit chaque fois que vous déplacez un fichier dans la corbeille:

    enter image description here

    Si vous cliquez sur "OK", rien ne se passe. Si vous cliquez sur "Annuler", la corbeille s'ouvrira et vous pourrez restaurer votre élément, puisque vous connaissez le nom et le chemin d'origine du fichier.

  • Il garde une trace des 50 dernières actions de la corbeille (une par ligne)
    Dans votre répertoire de base, le script crée un fichier journal, _trashlog.txt_, contenant les 50 dernières actions de la corbeille. Cela garantit que vous pouvez suivre ce qui s'est passé, même si vous avez accidentellement appuyé sur le bouton "OK".

    enter image description here

    Il enregistre tous les événements de la corbeille avec un horodatage, comme:

    _Tue Feb 24 07:30:55 2015: '/home/jacob/Naamloze map/Naamloos document (11e kopie)'
    Tue Feb 24 07:31:09 2015: '/home/jacob/Naamloze map/Naamloze map'
    _

Explication

En boucle, le script vérifie la liste des fichiers supprimés à l'aide de _trash-cli_, à l'aide de la commande:

_trash-list
_

La commande répertorie toutes les actions de suppression, également à partir de, par exemple. disques externes.

Chaque fois que de nouveaux éléments apparaissent dans la liste, le script appelle une fenêtre Zenity, répertoriant les fichiers (nouvellement) supprimés. Dans le même temps, ces fichiers sont répertoriés dans un fichier journal: _~/trashlog.txt_. Pour éviter que le fichier ne devienne trop volumineux, il ne "se souvient" (un peu plus) que des 50 derniers événements de suppression.

La fenêtre Zenity renvoie une valeur "non nulle" lorsque vous appuyez sur le bouton Cancel et que le script ouvre Trash (en fait _trash:///_) pour permettre à l'utilisateur de restaurer le fichier.

Comment utiliser

  1. Le script utilise _trash-cli_

    _Sudo apt-get install trash-cli
    _
  2. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom _trash_secure_ (sans extension) dans _~/bin_. Faites le répertoire s'il n'existe pas encore.

  3. Rendre le script exécutable.
  4. Déconnectez-vous et reconnectez-vous, exécutez le script à partir d'une fenêtre de terminal à l'aide de la commande suivante:

    _trash_secure
    _
  5. Si tout fonctionne correctement, ajoutez-le à vos applications de démarrage: Dash> Applications de démarrage> Ajouter.

Le scénario

_#!/usr/bin/env python3
import subprocess
import os
import time

home = os.environ["HOME"]
trashlog = home+"/trashlog.txt"

def trashlist():
    return subprocess.check_output(["trash-list"]).decode("utf-8")

def log_trash(last_trashed):
    if not os.path.exists(trashlog):
        with open(trashlog, "wt") as log:
            log.write(last_trashed)
    else:
        with open(trashlog, "r") as log:
            log = log.readlines()
            log = log[50:]+[last_trashed] if len(log) > 50 else log+[last_trashed]
        with open(trashlog, "wt") as out:
            for it in log:
                out.write(it)
            out.write("\n")

trash1 = trashlist()
while True:
    time.sleep (1)
    trash2 = trashlist()
    if trash2 != trash1:
        diff = (" ").join(["'"+l[l.find("/"):]+"'" for l in trash2.splitlines() if not l in trash1])
        log_trash(time.ctime()+": "+diff)
        zenity_message = "zenity --list --width=600 --height=200 --title='Items were trashed' --text='' --column='Path' "+diff
        try:
            check = subprocess.check_output(["/bin/bash", "-c", zenity_message]).decode("utf-8")
            if check != "":
                subprocess.Popen(["nautilus", "trash:///"])
        except subprocess.CalledProcessError:
            subprocess.Popen(["nautilus", "trash:///"])
    trash1 = trash2
_

Remarques

  • Le script suit également les actions de la corbeille à partir de lecteurs externes éventuellement connectés. Si l'un de ces lecteurs a un espace dans son nom, le script se brise. Je devais renommer mon disque externe, nommé "My Passport", pour donner un exemple. Cela n'est pas causé par le script lui-même, mais par les outils _trash-cli_ utilisés par le script.
  • La manière la plus élégante serait (bien sûr) de "supprimer" directement les fichiers si vous avez appuyé sur "Annuler". Les outils _trash-cli_ n'offrent pas l'option de le faire à partir de la ligne de commande, à l'exception d'une solution interactive.
1
Jacob Vlijm