将 `rm` 移至垃圾箱

Kon*_*lph 61 shell rm

是否有一个 Linux 脚本/应用程序,而不是删除文件,而是将它们移动到一个特殊的“垃圾”位置?我想用它来代替rm(甚至可能是后者的别名;这样做有利有弊)。

“垃圾”是指一个特殊的文件夹。单个mv $* ~/.trash是第一步,但理想情况下,这还应该处理多个同名文件的垃圾处理,而不会覆盖旧的垃圾文件,并允许使用简单的命令(一种“撤消”)将文件恢复到其原始位置。此外,如果在重新启动时自动清空垃圾(或防止无休止增长的类似机制),那就太好了。

存在针对此问题的部分解决方案,但“恢复”操作尤其重要。是否有任何现有的解决方案不依赖图形外壳中的垃圾系统?

(顺便说一句,这种方法是否合理,而不是使用频繁的备份和 VCS 是否合理,一直存在无休止的讨论。虽然这些讨论有一定的意义,但我相信我的要求仍然存在。)

zpe*_*pea 44

在 freedesktop.org 上有一个Trash 规范(草案)。这显然是桌面环境通常实现的。

命令行实现将是trash-cli。无需仔细观察,它似乎提供了您想要的功能。如果不是,请告诉我们这只是部分解决方案的程度。

就使用任何程序作为替代/别名rm而言,有充分的理由不这样做。对我来说最重要的是:

  • 该程序需要理解/处理所有rm的选项并采取相应的行动
  • 在其他人的系统上工作时,它有可能习惯于“新 rm”的语义并执行具有致命后果的命令

  • 我最终使用了这个解决方案,并禁用了 `rm`,所以我不能意外使用它(如果我真的需要它,仍然有 `/bin/rm`)。 (5认同)
  • @KonradRudolph:我的意思是人们已经习惯了 rm (被替换的那个)并没有真正删除任何东西的事实,所以人们不太小心,因为总是可以恢复的。当然,使用 rm 本身并不是坏事,也不是习惯。 (4认同)

Tee*_*sti 15

前面的答案提到了命令trash-clirmtrash. 默认情况下,在 Ubuntu 18.04 上都找不到这些,但命令gio是。命令gio help trash输出:

Usage:
  gio trash [OPTION…] [LOCATION...]

Move files or directories to the trash.

Options:
  -f, --force     Ignore nonexistent files, never prompt
  --empty         Empty the trash
Run Code Online (Sandbox Code Playgroud)

gio trash FILENAME在命令行上测试了使用,它的工作原理就像我在文件浏览器中选择了文件并单击了 DEL 按钮:文件被移动到桌面的垃圾文件夹。(即使我没有使用该-f选项,该命令也不会提示确认。)

以这种方式删除文件是可逆的,同时比重新定义rmrm -i确保安全并且必须确认每次删除更方便,如果您不小心确认了不应该删除的删除,这仍然会让您不走运。

我添加alias tt='gio trash'到我的别名定义文件中;tt是 To Trash 的助记符。

在 2018-06-27 的编辑中添加:在服务器机器上,没有垃圾目录的等价物。我编写了以下 Bash 脚本来完成这项工作;在台式机上,它使用gio trash,而在其他机器上,将作为参数给出的文件移动到它创建的垃圾目录。该脚本经过测试可以正常工作;我自己一直在使用它。脚本于 2021-04-27 更新。

Usage:
  gio trash [OPTION…] [LOCATION...]

Move files or directories to the trash.

Options:
  -f, --force     Ignore nonexistent files, never prompt
  --empty         Empty the trash
Run Code Online (Sandbox Code Playgroud)


小智 10

Trash-cli是一个 Linux 应用程序,可以在 Ubuntu 中使用 apt-get 或在 Fedora 中使用 yum 进行安装。使用该命令trash listOfFiles会将指定的内容移动到您的垃圾箱中。


rah*_*hmu 5

首先定义一个move_to_trash函数:

move_to_trash () {
    mv "$@" ~/.trash
}
Run Code Online (Sandbox Code Playgroud)

然后别名rm为:

alias rm='move_to_trash'
Run Code Online (Sandbox Code Playgroud)

rm您始终可以通过使用反斜杠转义来调用 old ,如下所示: \rm

我不知道如何在重新启动时清空垃圾目录(根据您的系统,您可能需要查看脚本),但创建一个定期清空目录的任务rc*也可能是值得的。cron

  • 不幸的是,这是最简单的部分……:/ (2认同)

Ehs*_*n88 5

这是一个坏主意。改掉这个习惯吧。就是这样:

请参阅 Apple 社区中的此答案:https://apple.stackexchange.com/questions/17622/how-can-i-make-rm-move-files-to-the-trash-can

答案基本上是说这是一个坏主意,因为它并没有改变使用的坏习惯rm。要改变这种习惯,请使用以下方法。我针对linuxbash 进行了调整:

  • 将此行添加到~/.bashrc

      alias rm="echo Use the full path i.e. '/bin/rm', consider using trash"
    
    Run Code Online (Sandbox Code Playgroud)
  • 从现在开始安装trash-cliapt install trash-cli使用命令。trash

这会导致你的习惯消失rm。每次输入时rm都会显示上面的语句。值得注意的是,trash还可以移动目录。