linux回收站脚本,Shell脚本实现Linux回收站功能

在系统运维过程中“Linux系统上常见的误操作”之首就是删除rm操作(特别是rm -rf),这些被误删的文件将无法被取回,那么是否有办法解决这个问题呢?目前有两种解决方案:

1. 第一种是如果你在误删除文件以后,若没有对硬盘做大量的IO(也就是硬盘上存放该被删除文件的设备块没被新的数据所覆盖),那么可借助一些第三方软件支持从硬盘上直接还原文件,在Linux有这方面的第三方软件,类似windows平台下的FinalData。

2. 第二种则是在你每次删除文件时,都将被删除的文件复制一份到指定的目录下,在你发现误删文件后能够从该目录下取回数据,这就相当于windows下的回收站了。

这篇文章将介绍的则是第二种解决方案,其优缺点都是非常明显的,优点是:可以确保每次删除的文件都能够找回;缺点就是:需要耗费相当一部分硬盘空间来存放被删除的文件;同时需要在每次删除文件时都必须通过这个删除脚本来处理。

下面看看这个Linux Shell脚本,既然其优缺点都非常明显,但这妨碍我们学习这种解决问题的思路……

[code lang=”shell”]

#!/bin/bash

from1=1

from2=2

garbage=HOME/.garbage

mvlog=garbage/mv.log

if [ ! -e garbage ]

then

mkdir -pgarbage

chmod 777 garbage

fi

function rand

{

a=(0 1 2 3 4 5 6 7 8 9 a b c d e A B C D E F )

for ((i=0;i>mvlog

mv "from1" "garbage/from1:random"

fi

}

function more

{

for file in *

do

echo "`pwd`/:file:random:`date`" >> mvlog

mvfile "garbage/file:random"

done 2> /dev/null

}

function rmi

{

if [ ! -d "from2" ]

then

echo -n "rm:remove regular empty file ‘from2′?" ; read answer;

if [ "answer" = ‘y’ -o "answer" = ‘Y’ ]

then

echo "`pwd`/:from2:random:`date`" >>mvlog

mv "from2" "garbage/from2:random"

fi

else

echo "rm: cannot remove directory ‘from2′: Is a directory"

fi

}

function rmf

{

if [ ! -d "from2" ]

then

echo "`pwd`/:from2:random:`date`" >> mvlog

mv "from2" "garbage/from2:random"

else

echo "rm: cannot remove directory ‘from2′: Is a directory"

fi

}

function rmr

{

if [ -e "from2" ]

then

result=(echo from2 | sed ‘s/\///g’)

echo "`pwd`/:result:random:`date`" >>mvlog

mv "result" "garbage/result:random"

fi

}

function rml

{

while :

do

clear

line=(cat -nmvlog | awk -F : ‘{print 1,"FileName:"2, "Time:"4}’)

linecount=(cat mvlog | wc -l)

echo -e "line\c"

echo

echo

echo "Please input number you want revent(line count:linecount)–exit(e)"

read answer

if [ "answer" = e -o "answer" = E ]

then

break

else

(

echo "please input y(sure:)"

read answer1

if [ "answer1" = y -o "answer" = Y ]

then

address=(sed -n "answer""p"mvlog | awk -F : ‘{print 1}’)

filename=(sed -n "answer""p"mvlog | awk -F : ‘{print 2}’)

filerand=(sed -n "answer""p"mvlog | awk -F : ‘{print 3}’)

fullname=addressfilename

if [ -e "fullname" ]

then

echo "The file exist!"

sleep 1

else

old="garbage/filename:filerand"

new="addressfilename"

mv "old" "new"

delline=( cat mvlog | sed "answer""d" | sort -o mvlog)

echo "update ok!!!"

sleep 1

fi

fi

)

fi

done

}

function help

{

echo "

-i) If you wants delete some file , this function is confirm you want,the same as old rm.

-f) If you wants delete some directory ,you can use this function ,the same as old rm.

-r) If you wants delete some directory of file ,this function can use , the same as old rm.

-l) This is new function,is you wants resume some file or directory you can use this function,

first this function can list some file in you garbage , these have some number ,if you

wants resume 1,you can input 1 and then input y to confirm.

If you want add some function or some new idear please contact me…

author:wds

email:7717060@sina.com

"

}

case "1"

in

[a-z]) : ;;

[0-9]) : ;;

[A-Z]) : ;;

?) more ;;

*) :;;

esac

if [ "#" -eq 0 ]

then

echo -n "rm: missing operand

Try ‘rm –help’ for more informaction.

"

fi

if [ "#" -eq 1 ]

then

case "from1"

in

-i) echo "Try ‘rm –help’ for more informaction."; break ;;

-f) echo "Try ‘rm –help’ for more informaction."; break ;;

-r) echo "Try ‘rm –help’ for more informaction."; break ;;

-l) rml ;;

–help) help;;

*) rm1;;

esac

fi

if [ "#" -eq 2 ]

then

case "from1"

in

-i) rmi ;;

-f) rmf ;;

-r) rmr ;;

-l) rml ;;

-rf) rmr ;;

–help) help ;;

esac

fi

if [ "#" -gt 2 ]

then

for file in *

do

mvfile "$home/"

done 2> /dev/null

fi

[/code]

本文链接:http://www.yunweipai.com/1579.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值