linux回收站脚本,101个脚本之linux回收站

众所周知,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 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值