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

 更新时间:2016年08月13日 13:27:19   作者:hb_fukua  
众所周知,linux是没有回收站的,一些人很害怕删错东西(有经验的linux管理员极少范这错误),个人不建议回收站,而应该是培养个人的安全意识。有点小跑题

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

#!/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")" 回收站里文件命名.

相关文章

  • RHCE桥接,免密登录和修改端口号介绍

    RHCE桥接,免密登录和修改端口号介绍

    大家好,本篇文章主要讲的是RHCE桥接,免密登录和修改端口号介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Linux如何使用HTTP进行远程系统监控

    Linux如何使用HTTP进行远程系统监控

    这篇文章主要介绍了Linux如何使用HTTP进行远程系统监控问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-11-11
  • Linux使用vim编辑文件保存时报E514:write error (file system full?)问题解决

    Linux使用vim编辑文件保存时报E514:write error (file system full?)问题解决

    最近在用vi编辑文档,保存的时候,提示如下错误:E514: write error (file system full?),所以这篇文章主要给大家介绍了关于Linux使用vim编辑文件保存时报E514:write error (file system full?)问题的解决方法,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
    2018-02-02
  • Apache启动提示错误undefined symbol: libiconv_open解决方法

    Apache启动提示错误undefined symbol: libiconv_open解决方法

    这篇文章主要介绍了Apache启动提示错误undefined symbol: libiconv_open解决方法,需要的朋友可以参考下
    2015-06-06
  • Ubuntu Server 16.04 LTS 上安装 LAMP图解教程

    Ubuntu Server 16.04 LTS 上安装 LAMP图解教程

    这篇文章主要介绍了Ubuntu Server 16.04 LTS 上安装 LAMP图解教程,需要的朋友可以参考下
    2016-09-09
  • ubuntu中终端命令提示符太长的修改方法汇总

    ubuntu中终端命令提示符太长的修改方法汇总

    Linux(Ubuntu)终端 命令提示符太长 怎么办?下面这篇文章主要给大家介绍了关于ubuntu中终端命令提示符太长的修改方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-04-04
  • 详解bash中的脚本调试机制

    详解bash中的脚本调试机制

    这篇文章主要介绍了bash中的脚本调试机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Linux Swap空间利用率过高问题

    Linux Swap空间利用率过高问题

    这篇文章主要介绍了Linux Swap空间利用率过高问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • ab网站压力测试命令

    ab网站压力测试命令

    这篇文章主要介绍了ab网站压力测试命令,需要的朋友可以参考下
    2016-05-05
  • Linux parted 分区命令使用解读

    Linux parted 分区命令使用解读

    这篇文章主要介绍了Linux parted 分区命令使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04

最新评论