较安全的rm脚本
March 29th, 2011
Categories: 应用
想必不少人体会过在Linux下误删文件的欲哭无泪的感觉。我整理出一份比较安全的rm脚本,贴在这里。
特性
- 接管原生的
/bin/rm命令,将待删除的文件mv至回收站,便于统一管理,或者更重要的,拯救误删文件。- 需要调用原生的
rm时,指定路径即可,例如:/bin/rm -rf somefolder- 记录删除日志到
/var/log/trash.log。如果不需要记录日志,只需要将log变量置空即可。- 将文件移动至回收站时自动重命名,以便可以重复删除重名文件。
- 贴图:
贴代码
用法
将下面的代码贴至 ~/.bashrc 或 ~/.bash_profile中,然后刷新该文件source ~/.bashrc即可。临时取消自定义的 rm:可以使用前文所说的/bin/rm或在当前环境下取消该function的定义:unset -f rm。需要根据自己的系统,修改一下各个变量的定义。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #safe remove, mv the files to .Trash with unique name
#and log the acction
function rm()
{
trash="$HOME/.Trash"
log="/var/log/trash.log"
stamp=`date "+%Y-%m-%d %H:%M:%S"` #current time
while [ -f "$1" ]; do
#remove the possible ending /
file=`echo $1 |sed 's#\/$##' `
pure_filename=`echo $file |awk -F / '{print $NF}' |sed -e "s#^\.##" `
if [ `echo $pure_filename | grep "\." ` ]; then
new_file=` echo $pure_filename |sed -e "s/\([^.]*$\)/$RANDOM.\1/" `
else
new_file="$pure_filename.$RANDOM"
fi
trash_file="$trash/$new_file"
mv "$file" "$trash_file"
if [ -w $log ]; then
echo -e "[$stamp]\t$file\t=>\t[$trash_file]" |tee -a $log
else
echo -e "[$stamp]\t$file\t=>\t[$trash_file]"
fi
shift #increment the loop
done
}

用了很长一段时间的trash-cli了
[Reply]
rex Reply:
March 29th, 2011 at 1:21 pm
不错的东东。看来没必要重新发明。
[Reply]
freetstar Reply:
March 29th, 2011 at 8:28 pm
貌似还有一个比较简单。。http://www.fainz.info/linux-replace-rm-to-mv.html
[Reply]
rex Reply:
March 29th, 2011 at 9:04 pm
楼上提到的脚本如下。本文脚本的思路一致,只不过加上了些自定义的设置等等,顺便练手bash。
2
3
4
5
6
alias rm=trash
trash()
{
mv $@ ~/.trash/
}
[Reply]
freetstar Reply:
March 29th, 2011 at 9:08 pm
博主文章里的代码高亮怎么弄的~求指导~
[Reply]
rex Reply:
March 29th, 2011 at 9:12 pm
可以搜索一下 WP 插件CodeColorer 。它支持 段落风格的代码高亮,以及inline模式的高亮。
[Reply]
thanks
以前还没听过这个插件~
[Reply]
你好博主, 我有个正则表达式的问题想请教一下:
我想表示除了制表符\t以外的所有空白字符\s。
这个字符如何表示。
多谢!
[Reply]
qb Reply:
April 6th, 2011 at 1:12 pm
明白了,用[^\S\t]
[Reply]
rex Reply:
April 12th, 2011 at 6:36 am
你的解法有问题。等我回复。
[Reply]
qb Reply:
April 13th, 2011 at 12:41 am
难道要考虑\n 那就是 [^\S\t\n] ?
主要应用是在处理excel文件时,有很多看不见的“空格”造成数据往数据库中导入出错。
所以把excel表格中的数据复制到 emeditor中处理一下。[^\S\t]就可以一下处理完,而不是一列一列得处理。
[Reply]
rex Reply:
April 14th, 2011 at 5:58 am
这个在一般的正则引擎里,只能穷举一下吧。
有的引擎(.NET)倒是支持字符组的+/-操作。
[Reply]
qb Reply:
April 14th, 2011 at 9:46 pm
perl应该是支持的吧, 我用的文本编辑器是emeditor。 那天试了好像还可以, 就试不好穷举
[Reply]
rex Reply:
April 14th, 2011 at 11:04 pm
(?!\t)\s此处是个空白字符,但是此处不是\t。这样试试。
[Reply]
use
rm directory as well
[Reply]
楼主bash的字体是哪种?可以列出来吗?
[Reply]
博主能评价一下emacs和vim对正则支持得怎么样吗?
[Reply]
rex Reply:
July 16th, 2011 at 3:06 pm
emacs 用得较少。
[Reply]
abcd Reply:
July 16th, 2011 at 6:50 pm
那vim呢?是不是比一般的复杂一些,加转义加得比较多?支持到什么程度?
[Reply]
rex Reply:
July 17th, 2011 at 7:38 am
应该说,vim对于正则的支持还是相当全面的,只不过语法比较怪异。
我整理了一份vim 正则特性,在google spreadsheet上,https://spreadsheets.google.com/pub?key=tYpX806OUUWG2uehT7XMH8A,翻墙可见。
[Reply]
abcd Reply:
July 18th, 2011 at 10:18 am
vim的零宽度反向匹配 atom\@<= 就是perl的(?<=atom),我怎么没试成功呢?请教一下应该怎么写。
[Reply]
在sf.net下载了Expressor,这个工具也不错。可以帮助测试build正在表达式。不过在这些软件中,我有些功能不好实现。
比如:
….xyz….
~~~====
…..123….
===~~~~~
…abc…..
~~~~=====
….345….
类似这样的文字,其中字符和数字串是我要匹配的东西。我也能正确匹配出来。现在我想把这些找到的东西抽出来,集中起来,变成类似
xyz
123
abc
345
这样的形式。如果使用语言来编写程序,我想肯定可以,但是使用工具软件,有这个功能吗?
谢谢指点。
[Reply]
不错~可以不用重复造轮子了。
有几个地方:
1. 中间一节获得purename的可以用basename代替
2. 如果是多个device之间mv,会产生实际的数据搬移操作,不仅仅是修改文件表。这样效率不高。如果先识别mount point,对每个device分别放一个trash,会好不少。
[Reply]
请问下德文的正则字符 À-ÖØ-öø-ÿ 怎么转成能支持utf-8 中文呢?
$q = trim(preg_replace(‘/([^-A-Za-zÀ-ÖØ-öø-ÿ0-9.@ ]*)/’, ”, $_REQUEST['q']));
[Reply]
博主的内容好强大,不过经常更新的话,会更好的。
[Reply]
立春万物更新,也希望博主的博客也经常更新。http://www.baiyangzuo.org/
[Reply]
好文章,当然会拜读了,原博主博客人气旺旺。http://www.btdrzs.com.cn/
[Reply]
虽然是元宵节,但是我们这好冷,风又好大,只能在家里看看博主的精彩博文了。http://www.shizizuo.info/
[Reply]
认真阅读后飘过,不得是不说好内容。http://www.tianxiezuo.org/
[Reply]