101個(gè)腳本之建立linux回收站的腳本
眾所周知,linux是沒(méi)有回收站的,一些人很害怕刪錯(cuò)東西(有經(jīng)驗(yàn)的linux管理員極少范這錯(cuò)誤),個(gè)人不建議回收站,而應(yīng)該是培養(yǎng)個(gè)人的安全意識(shí)。有點(diǎn)小跑題。
接著回來(lái)101個(gè)腳本之#15 Archiving Files As They're Removed 就是建立一個(gè)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
我們來(lái)說(shuō)下這個(gè)腳本的實(shí)現(xiàn)思路
將原本的rm命令用我們這個(gè)帶有回收站機(jī)制的myrm腳本代替(alias別名),腳本將要?jiǎng)h除的文件移動(dòng)到了home下個(gè)人目錄中以.deleted-files 命名的隱藏文件夾。
接著我們看看這個(gè)腳本是怎么實(shí)現(xiàn)的
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
這一段說(shuō)明 要是命令用帶 –f 選項(xiàng)的話(huà),則不進(jìn)回收站,調(diào)用原本的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循環(huán)順序處理參數(shù)
newname="$mydir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")" 回收站里文件命名.
相關(guān)文章
Linux系統(tǒng)中創(chuàng)建SSH服務(wù)器別名的兩種方法
這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)中創(chuàng)建SSH服務(wù)器別名的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Linux系統(tǒng)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Linux下新增用戶(hù)、指定用戶(hù)組、家目錄、獲取sudo權(quán)限方式
這篇文章主要介紹了Linux下新增用戶(hù)、指定用戶(hù)組、家目錄、獲取sudo權(quán)限方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Linux使用cd命令之實(shí)現(xiàn)切換目錄的完全指南
這篇文章主要介紹了Linux使用cd命令之實(shí)現(xiàn)切換目錄的完全指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02