服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|

服务器之家 - 服务器系统 - Linux - 101个脚本之建立linux回收站的脚本

101个脚本之建立linux回收站的脚本

2021-11-05 19:22hb_fukua Linux

众所周知,linux是没有回收站的,一些人很害怕删错东西(有经验的linux管理员极少范这错误),个人不建议回收站,而应该是培养个人的安全意识。有点小跑题

众所周知,linux是没有回收站的,一些人很害怕删错东西(有经验的linux管理员极少范这错误),个人不建议回收站,而应该是培养个人的安全意识。有点小跑题。
接着回来101个脚本之#15 Archiving Files As They're Removed 就是建立一个linux回收站的脚本

?
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/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 命名的隐藏文件夹。

接着我们看看这个脚本是怎么实现的

?
1
2
3
4
5
6
7
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命令。

?
1
2
3
4
5
6
7
8
9
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")" 回收站里文件命名.

原文链接:http://2804976.blog.51cto.com/2794976/737125

延伸 · 阅读

精彩推荐
  • LinuxJava开发时经常使用的相关Linux命令整理

    Java开发时经常使用的相关Linux命令整理

    这篇文章主要介绍了Java开发时经常使用的相关Linux命令整理,其中很多命令也适用于其他编程语言的文件编译时的相关需要,需要的朋友可以参考下...

    开源中文社区3842019-06-29
  • LinuxXen VPS下添加swap交换分区的方法

    Xen VPS下添加swap交换分区的方法

    Xen VPS下添加swap交换分区的方法,需要的朋友可以参考下。 ...

    Linux教程网2982020-03-21
  • Linux在Linux命令行中使用计算器的5个命令详解

    在Linux命令行中使用计算器的5个命令详解

    这篇文章主要介绍了在Linux命令行中使用计算器的5个命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    良许Linux5182020-08-23
  • Linux.httacces文件的配置技巧

    .httacces文件的配置技巧

    我要介绍的.htaccess的第一个应用是自定义错误页面,这将使你可以拥有自己的、个性化的错误页面(例如找不到文件时),而不是你的服务商提供的错误页...

    Linux教程网3182020-06-05
  • LinuxLinux下apache如何限制并发连接和下载速度

    Linux下apache如何限制并发连接和下载速度

    在Linux下限值Apache的并发连接数和下载速度需要用到一款Apache的扩展模块mod_limitipconn,下面我们就来讨论mod_limitipconn的安装使用方法...

    Linux教程网6882021-10-21
  • Linuxlinux学习日记八 认识与学习bash

    linux学习日记八 认识与学习bash

    这系列文章主要是一刀写的linux相关学习资料,这篇文章主要介绍了linux下的认识与学习bash的相关知识,需要的朋友可以参考下 ...

    Linux教程网1772019-12-06
  • Linuxlinux系统添加swap虚拟内存与删除配置

    linux系统添加swap虚拟内存与删除配置

    Swap分区,即交换区,Swap空间的作用可简单描述为当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用...

    Linux教程网4092019-11-20
  • LinuxLinux下使用函数获取用户空间ns级时间

    Linux下使用函数获取用户空间ns级时间

    因为测试程序性能的需要,必须将获得的时间精确到ns级,下面与大家分享下使用函数实现Linux用户空间ns级时间 ...

    Linux教程网3312019-10-23