101个脚本之建立linux回收站的脚本
众所周知,linux是没有回收站的,一些人很害怕删错东西(有经验的linux管理员极少范这错误),个人不建议回收站,而应该是培养个人的安全意识。有点小跑题。
接着回来101个脚本之#15ArchivingFilesAsThey'reRemoved就是建立一个linux回收站的脚本
#!/bin/sh #newrm,areplacementfortheexistingrmcommand,providesa #rudimentaryunremovecapabilitybycreatingandutilizinganew #directorywithintheuser'shomedirectory.Itcanhandledirectories #ofcontentaswellasindividualfiles,andiftheuserspecifies #the-fflagfilesareremovedandNOTarchived. #BigImportantWarning:You'llwantacronjoborsomethingsimilartokeep #thetrashdirectoriestamed.Otherwisenothingwilleveractually #bedeletedfromthesystemandyou'llrunoutofdiskspace! mydir="$HOME/.deleted-files" realrm="/bin/rm" copy="/bin/cp-R" if[$#-eq0];then#let'rm'ouptuttheusageerror exec$realrm#ourshellisreplacedby/bin/rm fi #Parsealloptionslookingfor'-f' flags="" whilegetopts"dfiPRrvW"opt do case$optin f)exec$realrm"$@";;#execletsusexitthisscriptdirectly. *)flags="$flags-$opt";;#otherflagsarefor'rm',notus esac done shift$(($OPTIND-1)) #Makesurethatthe$mydirexists if[!-d$mydir];then if[!-w$HOME];then echo"$0failed:can'tcreate$mydirin$HOME">&2 exit1 fi mkdir$mydir chmod700$mydir#alittlebitofprivacy,please fi forarg 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"$@"#ourshellisreplacedbyrealrm
我们来说下这个脚本的实现思路
将原本的rm命令用我们这个带有回收站机制的myrm脚本代替(alias别名),脚本将要删除的文件移动到了home下个人目录中以.deleted-files命名的隐藏文件夹。
接着我们看看这个脚本是怎么实现的
whilegetopts"dfiPRrvW"opt do case$optin f)exec$realrm"$@";;#execletsusexitthisscriptdirectly. *)flags="$flags-$opt";;#otherflagsarefor'rm',notus esac done
这一段说明要是命令用带–f选项的话,则不进回收站,调用原本的rm命令。
forarg 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")"回收站里文件命名.