101个脚本之linux回收站
众所周知,linux是没有回收站的,一些人很害怕删错东西(有经验的linux管理员极少范这错误),个人不建议回收站,而应该是培养个人的安全意识。有点小跑题。
接着回来101个脚本之#15 Archiving Files As They're Removed 就是建立一个linux回收站的脚本
The Code
#!/bin/sh
# newrm, a replacement for the existing rm command, provides a
# rudimentary unremove capability by creating and utilizing a new
# directory within the user's home directory. It can handle directories
# of content as well as individual files, and if the user specifies
# the -f flag files are removed and NOT archived.
# Big Important Warning: You'll want a cron job or something similar to keep
# the trash directories tamed. Otherwise nothing will ever actually
# be deleted from the system and you'll run out of disk space!
mydir="$HOME/.deleted-files"
realrm="/bin/rm"
copy="/bin/cp -R"
if [ $# -eq 0 ] ; then # let 'rm' ouptut the usage error
exec $realrm # our shell is replaced by /bin/rm
fi
# Parse all options looking for '-f'
flags=""
while getopts "dfiPRrvW" opt
do
case $opt in
f) exec $realrm "$@" ;; # exec lets us exit this script directly.
*) flags="$flags -$opt" ;; # other flags are for 'rm', not us
esac
done
shift $(($OPTIND - 1))
# Make sure that the $mydir exists
if [ ! -d $mydir ] ; then
if [ ! -w $HOME ] ; then
echo "$0 failed: can't create $mydir in $HOME" >&2
exit 1
fi
mkdir $mydir
chmod 700 $mydir # a little bit of privacy, please
fi
for arg
do
newname="$mydir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")"
if [ -f "$arg" ] ; then
$copy "$arg" "$newname"
elif [ -d "$arg" ] ; then
$copy "$arg" "$newname"
fi
done
exec $realrm $flags "$@" # our shell is replaced by realrm
我们来说下这个脚本的实现思路
将原本的rm命令用我们这个带有回收站机制的myrm脚本代替(alias别名),脚本将要删除的文件移动到了home下个人目录中以.deleted-files 命名的隐藏文件夹。
接着我们看看这个脚本是怎么实现的
while getopts "dfiPRrvW" opt
do
case $opt in
f) exec $realrm "$@" ;; # exec lets us exit this script directly.
*) flags="$flags -$opt" ;; # other flags are for 'rm', not us
esac
done
这一段说明 要是命令用带 –f 选项的话,则不进回收站,调用原本的rm命令。
for arg
do
newname="$mydir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")"
if [ -f "$arg" ] ; then
$copy "$arg" "$newname"
elif [ -d "$arg" ] ; then
$copy "$arg" "$newname"
fi
done
用for循环顺序处理参数
newname="$mydir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")" 回收站里文件命名.
本文转自 hb_fukua 51CTO博客,原文链接:http://blog.51cto.com/2804976/737125
101个脚本之linux回收站相关推荐
- linux回收站空间,打造linux回收站功能
前言:其实今天我是很忙的,不过内心总感觉有些事情必须要做.前两天一哥们把线上环境一个web节点的/给删除了,昨天一哥们又把mysql的data目录给删除了.试想一下,如果没有做全网备份,如果不是一个节 ...
- Linux回收站的设计与实现
作为Linux系统管理员或者软件开发人员,当你使用rm命令删除文件之后发现该文件依然有用但无法恢复,或者使用 'rm -rf'强制误删了某些文件时,是否为此感到痛苦不堪.是否苦恼于Linux缺乏类似W ...
- trash-cli设置Linux 回收站
trash-cli 设置 Linux 回收站 trash-cli是一个使用 python 开发的软件包,包含 trash-put.restore-trash.trash-list.trash-empt ...
- 【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )
文章目录 前言 一.Linux 中调用 Groovy 脚本 二.Windows 中调用 Groovy 脚本 前言 在 命令行 , Groovy 脚本 , Groovy 类 , Java 类中 , 可以 ...
- linux内存使用监控,如何利用Bash脚本监控Linux的内存使用情况
如何利用Bash脚本监控Linux的内存使用情况 发布时间:2020-09-13 14:36:53 来源:脚本之家 阅读:114 作者:Magesh Maruthamuthu 栏目:服务器 前言 目前 ...
- 使用shell脚本对Linux系统和进程资源进行监控
今天发现一个网站,快课网,感觉还不错,里面有编程,面试,算法等等相关内容. 链接如下:http://www.cricode.com/ 首页便看到这篇文章,正好对Linux和shell等持续关注,转载学 ...
- Shell脚本对Linux进行文件校验
Shell脚本对Linux进行文件校验 一.需求 有客户等保需求对文件一致性进行校验,想到利用md5sum工具,因此写脚本来对文件进行自定义扫描,后期可以利用其进行校验,快速校验文件发现变更的文件,一 ...
- python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法
脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个 ...
- 打造Linux回收站
linux是没有回收站概念的,一旦误删除文件了是很难很难找回来的,对普通用户而言误删除文件就等于永久性不可逆丢失数据了:不过可以改造一下rm命令来变相实现回收站功能,实际上就是mv命令转移文件到指定路 ...
最新文章
- WebSocket探秘
- 18B树、B++树和Trie树
- the java home_the java_home environment variable is not defined correctly
- Path画直线与弧线
- vivo 5G手机日产量10万台 3月销量同比增长超10%
- ultraedit 运行的是试用模式_单元测试 —— 前后端分离开发模式下后端质量的保证...
- 【转】无法打开登录所请求的数据库 xxxx。登录失败。 用户 'xxxxx' 登录失败。...
- Halcon学习路线——模板匹配和仿射变换
- [ACM] hdu 2082 找单词 (母函数)
- java检索账号和密码_如何从数据库中检索密码
- 流水线、超流水线、超标量(superscalar)技术对比(转)
- IT技术分享的一点点总结
- 华为手机连接电脑,无法使用USB调试或者无USB连接弹窗的问题
- box-sizing:boder-box原理
- 【论文笔记】RRU-Net: The Ringed Residual U-Net for Image Splicing Forgery Detection
- unity实现小地图和放大镜功能
- base64,base32bit加密解密
- PoE供电交换机的五大优势详解
- 5G全场景时代 战略关键转型期 华为不只要重构想象
- SwiftUI 界面刷新 外部修改 ObservableObject @ObservedObject @Published
热门文章
- 详解LAMP源码编译安装
- [leetcode] Recover Binary Search Tree
- 链表一元多项式计算器的实现(Java语言描述)
- Data Structures with C++ Using STL Chapter 3算法概述---笔记
- Sublime Text 提示[Decode error - output not utf-8]的解决方法
- js如何获取div下面的input_原生 js 如何获取宽高
- JAVA SE 学习day_10:集合、聊天室练习最终版
- python调包侠_拒绝调包侠,不需要高级算法和数据结构技巧
- UIView加任意边框(Masonry)
- 冬奥闭幕式黑科技再次引爆全网,AR中国结、折柳寄情……还有212项科技藏在冬奥里...