众所周知,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回收站相关推荐

  1. linux回收站空间,打造linux回收站功能

    前言:其实今天我是很忙的,不过内心总感觉有些事情必须要做.前两天一哥们把线上环境一个web节点的/给删除了,昨天一哥们又把mysql的data目录给删除了.试想一下,如果没有做全网备份,如果不是一个节 ...

  2. Linux回收站的设计与实现

    作为Linux系统管理员或者软件开发人员,当你使用rm命令删除文件之后发现该文件依然有用但无法恢复,或者使用 'rm -rf'强制误删了某些文件时,是否为此感到痛苦不堪.是否苦恼于Linux缺乏类似W ...

  3. trash-cli设置Linux 回收站

    trash-cli 设置 Linux 回收站 trash-cli是一个使用 python 开发的软件包,包含 trash-put.restore-trash.trash-list.trash-empt ...

  4. 【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )

    文章目录 前言 一.Linux 中调用 Groovy 脚本 二.Windows 中调用 Groovy 脚本 前言 在 命令行 , Groovy 脚本 , Groovy 类 , Java 类中 , 可以 ...

  5. linux内存使用监控,如何利用Bash脚本监控Linux的内存使用情况

    如何利用Bash脚本监控Linux的内存使用情况 发布时间:2020-09-13 14:36:53 来源:脚本之家 阅读:114 作者:Magesh Maruthamuthu 栏目:服务器 前言 目前 ...

  6. 使用shell脚本对Linux系统和进程资源进行监控

    今天发现一个网站,快课网,感觉还不错,里面有编程,面试,算法等等相关内容. 链接如下:http://www.cricode.com/ 首页便看到这篇文章,正好对Linux和shell等持续关注,转载学 ...

  7. Shell脚本对Linux进行文件校验

    Shell脚本对Linux进行文件校验 一.需求 有客户等保需求对文件一致性进行校验,想到利用md5sum工具,因此写脚本来对文件进行自定义扫描,后期可以利用其进行校验,快速校验文件发现变更的文件,一 ...

  8. python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法

    脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个 ...

  9. 打造Linux回收站

    linux是没有回收站概念的,一旦误删除文件了是很难很难找回来的,对普通用户而言误删除文件就等于永久性不可逆丢失数据了:不过可以改造一下rm命令来变相实现回收站功能,实际上就是mv命令转移文件到指定路 ...

最新文章

  1. WebSocket探秘
  2. 18B树、B++树和Trie树
  3. the java home_the java_home environment variable is not defined correctly
  4. Path画直线与弧线
  5. vivo 5G手机日产量10万台 3月销量同比增长超10%
  6. ultraedit 运行的是试用模式_单元测试 —— 前后端分离开发模式下后端质量的保证...
  7. 【转】无法打开登录所请求的数据库 xxxx。登录失败。 用户 'xxxxx' 登录失败。...
  8. Halcon学习路线——模板匹配和仿射变换
  9. [ACM] hdu 2082 找单词 (母函数)
  10. java检索账号和密码_如何从数据库中检索密码
  11. 流水线、超流水线、超标量(superscalar)技术对比(转)
  12. IT技术分享的一点点总结
  13. 华为手机连接电脑,无法使用USB调试或者无USB连接弹窗的问题
  14. box-sizing:boder-box原理
  15. 【论文笔记】RRU-Net: The Ringed Residual U-Net for Image Splicing Forgery Detection
  16. unity实现小地图和放大镜功能
  17. base64,base32bit加密解密
  18. PoE供电交换机的五大优势详解
  19. 5G全场景时代 战略关键转型期 华为不只要重构想象
  20. SwiftUI 界面刷新 外部修改 ObservableObject @ObservedObject @Published

热门文章

  1. 详解LAMP源码编译安装
  2. [leetcode] Recover Binary Search Tree
  3. 链表一元多项式计算器的实现(Java语言描述)
  4. Data Structures with C++ Using STL Chapter 3算法概述---笔记
  5. Sublime Text 提示[Decode error - output not utf-8]的解决方法
  6. js如何获取div下面的input_原生 js 如何获取宽高
  7. JAVA SE 学习day_10:集合、聊天室练习最终版
  8. python调包侠_拒绝调包侠,不需要高级算法和数据结构技巧
  9. UIView加任意边框(Masonry)
  10. 冬奥闭幕式黑科技再次引爆全网,AR中国结、折柳寄情……还有212项科技藏在冬奥里...