使用trash-cli避免误删文件--为rm增加回收站功能

时间:2021-07-26 16:13:19

2017-03-25 更新其他配置信息

MAKE “RM” MOVE FILES TO TRASH INSTEAD OF COMPLETELY REMOVING THEM, 译文在linux下的小工具–trash-rm

rmtrash

问题


相信有不少同学和我一样,有因习惯了rm命令,好几次一不小心冲动就删除重要文件的惨痛经历。

像这种使用 rm 命令误删除文件的情况,我们会注意,但是我们不能保证百分百的不会
出现这种情况,毕竟事情总有偶然,那么对于这种情况我们是不是就束缚无策呢,不!我们有相应的解决办法,那就是使用 trash-cli。

修改rm命令使删除文件到回收站


目标:将删除成功的文件会放入系统回收站中,位置:~/.local/share/Trash/files

目标:将删除成功的文件会放入系统回收站中
位置:回收站的位置位于~/.local/share/Trash/files
之前旧版本的回收站也可能在~/.Trash

回收站命令行工具trash-cli


主页 https://github.com/andreafrancia/trash-cli

trash-cli是一个使用 python 开发的软件包,包含trash-putrestore-trash、trash-listtrash-emptytrash-rm等命令,
我们可以通过这写命令,将文件移动到回收站,或者还原删除了的文件。
trash-put命令会把我们想要删除的文件移动到~/.local/share/Trash/files 中,
相关信息记录在~/.local/share/Trash/info中。

命令概览:

Tables Are Cool
trash-put 将文件或目录移入回收站
trash-empty 清空回收站
trash-list 列出回收站中的文件
restore-trash 还原回收站中的文件
trash-rm 删除回收站中的单个文件

安装


直接使用包管理器安装


现在我们来安装 trash-cli加入我们使用 CentOS,Fedora,Ubuntu等主流操作系统,我们可以直接使用软件包管理命令安装如

安装trash-cli工具,其实就是回收站的命令行模式:

sudo apt-get install trash-cli

如果是centos系统

sudo yum install -y trash-cli

用源码安装


如果包管理器安装失败,可以使用源码的安装trash-cli
我们可以在一下地址找到
trash-cli–https://github.com/andreafrancia/trash-cli

下载源码包


我们使用 git 克隆出来,

git clone git@github.com:andreafrancia/trash-cli.git

或者直接下载压缩包

tar xf trash-cli-master.tar.gz

编译


cd trash-cli-master
sudo python setup.py build
sudo python setup.py install

rm和trash


因为和 rm命令接口是兼容的,所以,可以使用 trash-put 代替 rm,
trash-cli 在删除文件时会记录文件的原始路径、删除时间和文件权限,并且兼容GNOME和 KDE的 trash实现。同时也实现了 FreeDesktop.org Trash Specification也支持除 home文件系统意外的其他文件系统和文件分区以及移动设备分区安装完毕之后我们可以通过一些配置,给trash命令添加别名”rm”,覆盖系统rm命令

如果只是想本用户使用,就修改~/.profile或者~/.bashrc
但是如果想要全局使用,就使用/etc/profile或者/etc/bashrc中

其实由于交互式shell和非交互式shell的一些区别,命令别名最好放在bashrc类文件中

在文件中加入

alias rm="trash"

或者

alias rm=”trush-put

如果想要立即生效就source一下

一键删除回收站


其实为了安全的话,满可以在全局的profile或者bashrc中添加trash的,
我们的trash命令也是支持root的
由于Ubuntu默认没有root账户,但是可以sudo获取root权限,或者sudo su和sudo -sH切换为root

在Ubuntu中,root账户其实也是存在的,只需要使用sudo su此命令Ubuntu每次会为root生成一个动态密码我们只需要输入自己的密码,就可以切换为root,使用exit退出。

当然如果您觉得麻烦,也可以直接为Ubuntu添加root账户。

但是没有root账户,那么我们就无法通过root账户登陆图形界面,那么也就无法使用gui进入回收站删除文件,那么每次进入~/.local/share/Trash/files 就略显笨拙。
因此我们这时我们就需要一键删除回收站的命令

alias trash-rm="sudo rm -rf $HOME/.local/share/Trash/files/"

最后附上我的整个配置


#modify by gatieme at 2015-09-14 19:48 for the rm to move all files to Trash
alias rm="trash"
alias RM="trash"
alias trash-rm="/bin/rm -rf $HOME/.local/share/Trash/files/"
alias rm-trash="/bin/rm -rf $HOME/.local/share/Trash/files/"
alias rm-trash-root="/bin/rm -rf /root/.local/share/Trash/files/"

注意
使用过程发现的一些问题

请不要使用trash删除回收站中的文件,你会发现一个奇特的现象,你删除了原文件,但是又多了一个后缀加上 _1 的新文件

如果您把alias放置在~/.bashrc中,你将无法使用sudo使用~/.bashrc的alias别名信息

如果您使用sudo trash删除的文件是放在自己的目录下的,而不是root下,但是回收站中文件的属用户和组用户都会变成root,您将只能使用root权限进行删除