Nautilus перемещает предметы в корзину без запроса подтверждения

Как заставить Nautilus потребовать подтверждение да / нет после нажатия клавиши удаления?

Я знаю опцию «Файлы» -> «Предпочтения» -> «Поведение»: «Задайте до опорожнения мусорного ящика или удаления файлов», но он проверяется и применяется только при очистке корзины.

Есть ли способ получить окно подтверждения перед перемещением файлов в корзину?

Фон Основная проблема, которую я имею, это то, что я иногда случайно ударяю по клавише удаления на клавиатуре, даже не заметив. Я уверен, что это произошло, и я не могу жить с идеей просмотра моей корзины мусора, чтобы проверить, не собираюсь ли я выбросить то, что я не хотел.

1
задан 23 February 2015 в 23:27

1 ответ

Nautilus не предоставляет вариант подтверждения: решение?

Тот факт, что nautilus не предоставляет опцию, не означает, что вы должны рискнуть случайно потерять файлы, если вы непреднамеренно (и не заметили ) нажмите клавишу Enter.

Вы можете просто запустить сценарий в фоновом режиме, следя за действиями удаления с помощью инструментов trash-cli. Если вы запустите сценарий ниже в фоновом режиме, он сделает две вещи, которые предотвратят незаметное удаление

Он уведомляет вас всякий раз, когда вы перемещаете файл в корзину: если вы нажмете «ОК», ничего не произойдет. Если вы нажмете «Отмена», мусор будет открыт, и вы сможете восстановить свой предмет, поскольку знаете имя и исходный путь к файлу. Он отслеживает последние 50 действий мусора (по одному на строку). В домашнем каталоге сценарий создает файл журнала trashlog.txt с последними 50 действиями мусора. Это позволяет следить за тем, что произошло, даже если вы случайно нажали кнопку «ОК». Он регистрирует все события мусора с отметкой времени, например:
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'

Объяснение

В цикле скрипт проверяет список удаленных файлов с помощью trash-cli, с командой:

trash-list

Команда перечисляет все действия удаления, также, например, из внешние диски.

Всякий раз, когда в списке появляются новые элементы, сценарий вызывает окно Zenity, в котором перечислены (недавно) удаленные файлы. В то же время эти файлы перечисляются в файл журнала: ~/trashlog.txt. Чтобы не допустить, чтобы файл стал большим, он только «запоминает» (немного больше) последние 50 событий удаления.

Окно Zenity возвращает «ненулевое», когда кнопка Cancel

Как использовать

Сценарий использует trash-cli
sudo apt-get install trash-cli
, а скрипт открывает Trash (фактически trash:///), чтобы позволить пользователю восстановить файл. Скопируйте сценарий ниже в пустой файл, сохраните его как trash_secure (без расширения) в ~/bin. Создайте каталог, если он еще не существует. Сделайте скрипт исполняемым. Выйдите из системы и запустите тестовый запуск сценария с терминала eindow с помощью команды:
trash_secure
Если все работает нормально, добавьте его в свои приложения для запуска: Dash> Startup Applications> Add.

Сценарий

#!/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

Примечания

Он уведомляет вас всякий раз, когда вы перемещаете файл в корзину: если вы нажмете «ОК», ничего не произойдет , Если вы нажмете «Отмена», мусор будет открыт, и вы сможете восстановить свой предмет, так как вы знаете имя и исходный путь к файлу. Самый изящный способ был бы (конечно) прямо «некрасить» «файлы, если вы нажали« Отмена ». Инструменты trash-cli не предоставляют возможности сделать это из командной строки, кроме интерактивного.
1
ответ дан 23 May 2018 в 23:01

Другие вопросы по тегам:

Похожие вопросы: