Linux服务器实现回收站功能脚本讲解

Linux服务器实现回收站功能脚本讲解

众所周知,linux是没有回收站的,一旦误删,容易导致文件丢失,那么这时一个回收站可以避免类似操作失误。这里主要使用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 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

我们来说下这个脚本的实现思路

将原本的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

这一段说明 要是命令用带 –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循环顺序处理参数

newname=”$mydir/$(date “+%S.%M.%H.%d.%m”).$(basename “$arg”)” 回收站里文件命名.

赞(0)
声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » Linux服务器实现回收站功能脚本讲解

登录

找回密码

注册