给rm命令加保险
众所周知,脑残可以学习,但是手残没法治。相信每一位喜欢用终端操作电脑的同学都曾手误使用 rm 命令把不该删除的文件删了。然而,使用 rm 删除的文件是不会进去回收站的。
所以,最好的方法就是我们自定义一个命令 del ,以后通过自定义的 del 删除文件。当然,很难做到完全替代 rm,但是对于日常使用是足够的。
下面是准备实现的功能:
del file1 file2 ...: 把每一个文件移入回收站。del dir:因为对目录操作的风险较大,因此这里只给出提示信息,让用户自行使用rm删除。
下面来看 Ubuntu 下的回收站的结构。回收站的路径是 ~/.local/shared/Trash/,其结构只有三个目录:
files:被删除的文件的位置。info:记录被删除文件的操作信息,包括原路径和删除时间。expunged:没查,不知道(>_<)。
sin@ubuntu:~$ cd .local/share/Trash/
sin@ubuntu:~/.local/share/Trash$ tree .
.
├── expunged
├── files
│ └── testdel
└── info
└── testdel.trashinfo
3 directories, 2 files
sin@ubuntu:~/.local/share/Trash$ cat info/*
[Trash Info]
Path=/home/sin/workspace/testdel
DeletionDate=2020-02-19T15:42:14
那么,实现上面的需求就很简单了:在 ~/.bashrc 中加入我们的命令函数,然后通过 alias 重命名为我们想要的名称就可以了。
# my alias, add by sinkinben at 2020/02/19
alias del='trash'
write_trashinfo()
{
info_path='/home/sin/.local/share/Trash/info/'
abs_path=$info_path$1'.trashinfo'
echo '[Trash Info]' > $abs_path
echo Path=$2/$1 >> $abs_path
echo DeletionDate=`date +"%Y-%m-%dT%H:%M:%S"` >> $abs_path
}
trash()
{
src_path=`pwd`
trash_path='/home/sin/.local/share/Trash/files/'
for x in $@
do
if [ -d $x ]
then
echo '[BE CAREFUL!] ' $x ' is a directory.'
echo 'You should use rm to finish this operation by yourself.'
continue
fi
if [ -f $x ]
then
mv $x $trash_path
write_trashinfo $x $src_path
fi
done
}
重启一下终端,输入 alias,可以找到新加入的 del 命令:
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias del='trash'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
测试 1:删除普通的文件
sin@ubuntu:~/workspace$ touch f1 f2 f3
sin@ubuntu:~/workspace$ ls
f1 f2 f3 scripts Sin-Notebook sjtu-courses snake.py
sin@ubuntu:~/workspace$ del f*
sin@ubuntu:~/workspace$ tree ~/.local/share/Trash/
/home/sin/.local/share/Trash/
├── expunged
├── files
│ ├── f1
│ ├── f2
│ ├── f3
│ └── testdel
└── info
├── f1.trashinfo
├── f2.trashinfo
├── f3.trashinfo
└── testdel.trashinfo 3 directories, 8 files
sin@ubuntu:~/workspace$ cat ~/.local/share/Trash/info/*
[Trash Info]
Path=/home/sin/workspace/f1
DeletionDate=2020-02-19T15:52:12
[Trash Info]
Path=/home/sin/workspace/f2
DeletionDate=2020-02-19T15:52:12
[Trash Info]
Path=/home/sin/workspace/f3
DeletionDate=2020-02-19T15:52:12
[Trash Info]
Path=/home/sin/workspace/testdel
DeletionDate=2020-02-19T15:42:14
测试2: 删除目录
sin@ubuntu:~/workspace$ mkdir dir1
sin@ubuntu:~/workspace$ del dir1/
[BE CAREFUL!] dir1/ is a directory.
You should use rm to finish this operation by yourself.
当然,这有一个缺点,对于被删除的同名文件,这个 del 命令就很捉急了。比如:
del dir1/test
del dir2/test
显然,在回收站中,dir1/test 这个文件就被 dir2/test 给覆盖了(包括文件内容和日志信息)。但是如果使用 Ubuntu 的文件管理器进行删除,回收站是能够处理这种同名情况的。
好了,又水了一篇文章,祝各位小改改身体健康。
给rm命令加保险的更多相关文章
- ubuntu 修该rm命令使删除文件到回收站
ubuntu下删除文件到回收站 相信有不少同学和我一样,有因习惯了rm命令,好几次一不小心冲动就删除重要文件的惨痛经历! 目标:将删除成功的文件会放入系统回收站中,位置:~/.local/share/ ...
- 每天一个Linux命令(05)--rm命令
自从学会了用mkdir创建目录之后,整个系统里就只能看到一堆空目录了,囧~ 那么今天我们来学一下如何清理这些空目录吧--rm命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录 ...
- 相对和绝对路径/cd命令/创建和删除目录mkdir/rmdir/rm命令
2.6 相对和绝对路径 2.7 cd命令 2.8 创建和删除目录mkdir/rmdir 2.9 rm命令 绝对路径:从根开始的路径:文件所在的路径: 相对路径:相对于当前目录而言的路径:上一级或者下一 ...
- 下厨房6月26日数据丢失事故总结 MYSQL主分区被rm 命令误删除
下厨房6月26日数据丢失事故总结 MYSQL主分区被rm 命令误删除 http://tech.xiachufang.com/?p=18 在6月26日凌晨12点左右,我们在做线上数据库的备库时,误将线上 ...
- linux 重写rm命令
重写rm命令 replease rm to trash 必须使用root编辑/etc/bashrc vim /etc/bashrc 在最后面增加如下脚本 saferm () { if [ ! -d ...
- linux系列(五):rm命令
rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf).所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西 ...
- centos7 配置rm命令失效。
之前写过一篇alias别名的方法,但这个方法配置rm命令在重启后就无效了.而且重启后得输入source alias_test.sh.才可以 centos7 alias别名永久生效 原因是:root用户 ...
- Linux命令学习总结:rm命令
命令简介: 该命令用来删除Linux系统中的文件或目录.通常情况下rm不会删除目录,你必须通过指定参数-r或-R来删除目录.另外rm通常可以将该文件或目录恢复(注意,rm删除文件其实只是将指向数据 ...
- 【初级】linux rm 命令详解及使用方法实战
rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...
随机推荐
- SpringBoot快速上手系列01:入门
1.环境准备 1.1.Maven安装配置 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. 下载Maven可执行文件 cd /usr/local ...
- sublime 安装Anaconda插件 配置python开发环境
我的sublime 3 python 3.6.6 安装Anaconda插件 由于Anaconda插件本身无法知道Python安装的路径,所以需要设置Python主程序的实际位置.选择Settings ...
- .Net Core中使用ExceptionFilter
.Net Core中有各种Filter,分别是AuthorizationFilter.ResourceFilter.ExceptionFilter.ActionFilter.ResultFilter. ...
- Python——详解collections工具库
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天为大家介绍Python当中一个很好用也是很基础的工具库,叫做collections. collection在英文当中有容器的意思,所以顾 ...
- JS基础入门篇(十二)—JSON和Math
1.JSON JSON: 对象格式的字符串 轻量的数据传输格式 注意事项: 键名 需要 使用 双引号 包起来 JOSN有两个方法:JSON.parse和 JSON.stringify. JSON.pa ...
- Python-PhantomJS的安装和使用
PhantomJS无需浏览器的Web测试: PhantomJS官网下载地址:https://phantomjs.org/download.html 下载PhantomJS zip文件,解压放置在D:\ ...
- 关于有趣的windows.h
system 函数: 这个函数差不多就是调用 cmd (命令提示符). 当然,不一定要在程序中调用,用 txt 打入文本( 不用加system() )后改后缀名为 cmd 后运行即可. Win 键 + ...
- JAVA有关位运算的全套梳理
一.在计算机中数据是如何进行计算的? 1.1:java中的byte型数据取值范围 我们最开始学习java的时候知道,byte类型的数据占了8个bit位,每个位上或0或1,左边第一位表示符号位,符号位如 ...
- Generator的异步编程
对比下常用的异步处理的方案: 1,回调 我们常说的 “回调地狱”,就是多个异步操作时候,代码多重嵌套,异步之前形成强耦合,如果修改一处,其他地方也是跟着修改.(callback hell). 2,pr ...
- frida入门总结
一.Frida概述 Frida是一款轻量级HOOK框架,可用于多平台上,例如android.windows.ios等. frida分为两部分,服务端运行在目标机上,通过注入进程的方式来 ...