给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 命令详解及使用方法实战[初级]中我们就 ...
随机推荐
- Event Loop事件循环,GET!
JS中比较让人头疼的问题之一要算异步事件了,比如我们经常要等后台返回数据后进行dom操作,又比如我们要设置一个定时器完成特定的要求.在这些同步与异步事件里,异步事件肯定是在同步事件之后的,但是异步事件 ...
- JavaScript中点击按钮弹出新的浏览器窗口
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.js * 作者:常轩 * 微信公众号:Worldhel ...
- 量化投资学习笔记31——《Python机器学习应用》课程笔记05
用分类算法进行上证指数涨跌预测. 根据今天以前的150个交易日的数据,预测今日股市涨跌. 交叉验证的思想:将数据集D划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从D中通过分层 ...
- tomcat&servlet初记
tomcat&servlet初记 1. web相关概念 2. web服务器软件的学习:tomcat 3. servlet入门学习 web相关概念 1,软件架构 1,cs架构:客户端/服务器端 ...
- LLVM 中间代码归纳
Identifiers 标识符 @ 全局 % 局部 后接字符串 命名量 @name %name 无符号数字 未命名量 @42 %42 类型系统 void 空类型 <type> * 指针类型 ...
- 从头认识js-基本概念(关键字,保留字,数据类型)
语法 ECMAScript的语法大量借鉴了C及其他类C语言(如Java和Perl)的语法.因此,熟悉这些语言的开发人员在接受ECMSAScript更加宽松的语法时,一定会有一种轻松自在的感觉. 区分大 ...
- MVC08
1. c# 索引器(indexer) using System; using System.IO; namespace IO { class Program { ]; static void Main ...
- 服务器推送 SSE 了解一下?
hello~亲爱的看官老爷们大家好~过完年第一周已经结束,是时候开始制定新的工作计划了.主要负责的项目是数据可视化平台,而使用中如果服务器能有推送能力让页端得到相关通知的话,就能实现很多功能上的优化. ...
- 前端面试题-HTML语义化标签
一.HTML5语义化标签 标签 描述 <article> 页面独立的内容区域. <aside> 页面的侧边栏内容. <bdi> 允许您设置一段文本,使其脱离其父元素 ...
- HTML5前期学习准备(一)
HTML简介 1.html的基本概念 HTML:HyperTextMarket language,超文本标记语言(所谓"超文本"就是指页面内可以包含图片.链接,甚至音乐.程序等非文 ...