- 相關推薦
101個腳本之linux回收站
眾所周知,linux是沒有回收站的,一些人很害怕刪錯東西(有經(jīng)驗的linux管-理-員極少范這錯誤),個人不建議回收站,而應該是培養(yǎng)個人的安全意識。有點小跑題。
接著回來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 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
我們來說下這個腳本的實現(xiàn)思路
將原本的rm命令用我們這個帶有回收站機制的myrm腳本代替(alias別名),腳本將要刪除的文件移動到了home下個人目錄中以.deleted-files 命名的隱藏文件夾。
接著我們看看這個腳本是怎么實現(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
這一段說明 要是命令用帶 –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循環(huán)順序處理參數(shù)
newname="$mydir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")" 回收站里文件命名.
【101個腳本之linux回收站】相關文章:
廣告腳本鏡頭腳本03-23
校園電影腳本03-23
電影腳本制作03-23
婚禮拍攝腳本03-23
宣傳短片腳本03-23
腳本使用技巧03-23
平面拍攝腳本03-23
婚禮攝像腳本03-23
牙膏廣告腳本03-23