较安全的rm脚本
浏览:5038次 出处信息
想必不少人体会过在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
。需要根据自己的系统,修改一下各个变量的定义。
logger () { time=`TZ="Asia/Shanghai" date +"%Y-%m-%d %T"`; echo "[$time] $*"}
rm () { local limit=50; if [ -d $HOME/.local/share/Trash/files ]; then trash="$HOME/.local/share/Trash/files"; else trash="$HOME/.Trash"; fi; local log="/var/log/trash.log"; while [[ ! -z "$1" ]]; do if [[ ! -d "$1" ]]; then if [[ ! -f "$1" ]]; then shift; continue; fi; fi; full=`readlink -f "$1"`; base=`basename "$full"`; if [[ -n ` echo "$base" |grep "\." ` ]]; then new=`echo "$base" |sed -e "s/\([^.]*$\)/$RANDOM.\1/" `; else new="$base.$RANDOM"; fi; trash_file="$trash/$new"; local fs=`du -BM -s "$full" |awk -FM '{print $1}'`; if [ "$fs" -gt "$limit" ]; then read -p "File/Folder is ${fs}Mb, too large. rm it permanently? [Y/n]" answer; case "$answer" in "Y" | "" | "y") /bin/rm -rv "$full"; logger "'$full' removed permanently" ;; *) logger "aborted from deleting $full" ;; esac; shift; continue; fi; mv "$full" "$trash_file"; if [ $? -eq 0 ]; then if [ -w "$log" ]; then logger "$full => [$trash_file]" | tee -a "$log"; else logger "$full => [$trash_file]"; fi; else logger "Error deleting $full"; fi; shift; done}
建议继续学习:
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:统计最近用过的linux命令
后一篇:28个Unix/Linux的命令行神器 >>
文章信息
- 作者:rex 来源: 我爱正则表达式
- 标签: rm
- 发布时间:2012-09-20 14:03:00
近3天十大热文
- [56] Oracle MTS模式下 进程地址与会话信
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 如何拿下简短的域名
- [54] 图书馆的世界纪录
- [53] Go Reflect 性能
- [53] android 开发入门
- [50] 【社会化设计】自我(self)部分――欢迎区
- [50] 读书笔记-壹百度:百度十年千倍的29条法则
- [39] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑