众所周知,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 errorexec $realrm # our shell is replaced by /bin/rmfi
# Parse all options looking for ‘-f’
flags=
while getopts dfiPRrvW optdocase $opt inf) exec $realrm $@ ;; # exec lets us exit this script directly.*) flags= $flags -$opt ;; # other flags are for ‘rm’, not usesacdoneshift $(($OPTIND – 1))
# Make sure that the $mydir exists
if [ ! -d $mydir ] ; thenif [ ! -w $HOME ] ; thenecho $0 failed: can’t create $mydir in $HOME 2exit 1fimkdir $mydirchmod 700 $mydir # a little bit of privacy, pleasefi
for argdonewname= $mydir/$(date +%S.%M.%H.%d.%m ).$(basename $arg ) if [ -f $arg ] ; then$copy $arg $newname elif [ -d $arg ] ; then$copy $arg $newname fidone
exec $realrm $flags $@ # our shell is replaced by realrm
我们来说下这个脚本的实现思路将原本的rm命令用我们这个带有回收站机制的myrm脚本代替(alias别名),脚本将要删除的文件移动到了home下个人目录中以.deleted-files 命名的隐藏文件夹。
接着我们看看这个脚本是怎么实现的
while getopts dfiPRrvW optdocase $opt inf) exec $realrm $@ ;; # exec lets us exit this script directly.*) flags= $flags -$opt ;; # other flags are for ‘rm’, not usesacdone
这一段说明 要是命令用带 f 选项的话,则不进回收站,调用原本的rm命令。
for argdonewname= $mydir/$(date +%S.%M.%H.%d.%m ).$(basename $arg ) if [ -f $arg ] ; then$copy $arg $newname elif [ -d $arg ] ; then$copy $arg $newname fidone
用for循环顺序处理参数newname= $mydir/$(date +%S.%M.%H.%d.%m ).$(basename $arg ) 回收站里文件命名.
往事是尘封在记忆中的梦,而你是我唯一鲜明的记忆,