Nautilus 将项目移至垃圾箱而不要求确认

Nautilus 将项目移至垃圾箱而不要求确认

如何强制 Nautilus 在按下删除键后要求输入是/否确认?

我知道“文件”->“首选项”->“行为”选项:“清空垃圾箱或删除文件前询问”,但它已被选中并且仅适用于清空垃圾箱。

有没有办法在文件移至垃圾箱之前显示确认窗口?

背景
我最大的问题是,我有时会不小心按到键盘上的删除键而没有意识到。我肯定这种事发生过,我无法忍受翻看垃圾文件夹来检查我是否要扔掉一些我不想扔掉的东西。

答案1

不,Unity 没有像 Windows 那样的确认删除框。这就是 bin 存在的原因,因此如果您确实犯了错误,您可以通过点击恢复来撤消它。

答案2

Nautilus 不提供确认选项:解决方案?

尽管 nautilus 没有提供选项,但这并不意味着如果您无意中(且没有注意到)按下 Enter 键,您就必须冒着意外丢失文件的风险。

您可以简单地在后台运行脚本,关注删除操作,使用trash-cli-tools。如果您在后台运行下面的脚本,它会执行两项操作,以防止被忽视的删除

  • 每当您移动文件到垃圾箱时它都会通知您:

    在此处输入图片描述

    如果您点击“确定”,则不会发生任何事情。如果您点击“取消”,则会打开垃圾箱,您可以恢复项目,因为您知道文件的名称和原始路径。

  • 它记录最后 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(实际上trash:///)以使用户能够恢复文件。

如何使用

  1. 该脚本使用trash-cli

    sudo apt-get install trash-cli
    
  2. 将下面的脚本复制到一个空文件中,将其另存为trash_secure(无扩展名)~/bin。如果目录尚不存在,请创建该目录。

  3. 使脚本可执行。
  4. 注销并重新登录,使用以下命令从终端 eindow 测试运行脚本:

    trash_secure
    
  5. 如果一切正常,请将其添加到您的启动应用程序:Dash > 启动应用程序 > 添加。

剧本

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

笔记

  • 该脚本还会跟踪可能连接的外部驱动器的垃圾操作。如果其中一个驱动器的名称中有空格,脚本就会中断。举个例子,我不得不重命名我的外部驱动器,名为“My Passport”。这不是由脚本本身引起的,而是由trash-cli脚本使用的工具引起的。
  • 最优雅的方式(当然)是,如果您按了“取消”,则直接“恢复”文件。trash-cli但是,除了交互式方式外,这些工具不提供从命令行执行此操作的选项。

相关内容