科技常识:101个脚本之建立linux回收站的脚本

2021-04-20 14:55:38
导读今天小编跟大家讲解下有关科技常识:101个脚本之建立linux回收站的脚本,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关科技常

今天小编跟大家讲解下有关科技常识:101个脚本之建立linux回收站的脚本,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关科技常识:101个脚本之建立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 existsif [ ! -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 fifor 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 doneexec $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

这一段说明 要是命令用带 Cf 选项的话,则不进回收站,调用原本的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")"回收站里文件命名.

来源:爱蒂网

免责声明:本文由用户上传,如有侵权请联系删除!

猜你喜欢

最新文章