由于现在的linux文件系统大多是etx3的,一不小心删除后是无法恢复的(至少我不知道),而rm是个很危险的操作!鉴于此我写了这俩小脚本,希望GGJJ们指点!
1,用root修改rm的权限:
#chmod o-x /bin/rm
2,在用户主目录下创建个"垃圾箱"
$mkdir ~/.temp
删除文件脚本:
cat erase
#!/bin/ksh
(($#==0)) && { echo "No paraments!";exit 1; }
for i in $*
do
mv -f $i ~/.temp/$(find $(pwd) -maxdepth 1 -name $i|tr "/" "=")
done
恢复文件脚本:
cat unerase
#!/bin/ksh
(($#==0))&&{ echo "No paraments!";exit 1; }
cd ~/.temp
list=$(for i in $*;do ls ~/.temp|grep "/<$i/>";done)
for j in $list
do
file=$(echo $j|tr "=" "/")
mv $j ${file%/*}/${file##*/}
done
admirer 回复于:2003-12-22 14:57:08
:)。MM真行!
bjgirl 回复于:2003-12-22 15:33:43
引用:原帖由 "admirer"]:)。MM真行!
发表:
这不过是一个假rm,真mv的伎俩!,;)
BTW:那个垃圾箱里的文件可以用cron来定时清理!
admirer 回复于:2003-12-22 16:16:21
嗯!最好不要用cron去清理,不然她还是不给后悔的机会的。:)
麻烦MM再帮着给倒一下“垃圾”。这样就“全”了!
網中人 回复于:2003-12-22 16:34:09
cron 再加上保留日期判斷(如 30 天),應是不錯的...
要不然,用 logrotate 工具保留最多一定數量的備份也行....
如何?
bjgirl 回复于:2003-12-22 17:00:00
引用:原帖由 "admirer" 发表:
嗯!最好不要用cron去清理,不然她还是不给后悔的机会的。:)
麻烦MM再帮着给倒一下“垃圾”。这样就“全”了!
倒"垃圾"的脚本应该也很EASY ;),实际上paly shell不过如此,要充分利用系统给我们的"积木",按照自己的设计去搭就OK啦, ;)
朽木可雕 回复于:2003-12-22 21:23:54
引用:原帖由 "bjgirl"]
发表:
我好崇拜你啊。你就是这个论坛里我的第二个偶像。
admirer 回复于:2003-12-22 21:33:54
引用:原帖由 "朽木可雕" 发表:
我好崇拜你啊。你就是这个论坛里我的第二个偶像。
to “bjgirl”
MM加油啊!已经有fans了!祝贺,恭喜!!
panlm 回复于:2003-12-22 22:36:16
无聊, 何必搞得像windows一样??
bjgirl 回复于:2003-12-22 23:14:12
引用:原帖由 "panlm"]无聊, 何必搞得像windows一样??
发表:
饱受打击~~:( :em08: :em10: :em14:
admirer 回复于:2003-12-22 23:32:23
引用:原帖由 "bjgirl"]饱受打击~~:( :em08: :em10: :em14:
发表:
MM放宽心,随他去吧! :em03:
eagle_fan 回复于:2003-12-23 11:03:28
赫赫,不錯不錯
sa無聊的時候寫腳本挺有意思的
我連mount cdrom都寫了一個腳本,嘿嘿
朽木可雕 回复于:2003-12-23 11:27:17
写的不错。bjgirl,你能帮我看一下我发的那个编译问题的帖子吗?谢谢
有点惨 回复于:2004-06-29 17:59:21
查资料的时候搜了出来,顶一下,不错,很适合我这种人用,稍稍的花了些时间改了一下,修正一下带路径删除文件无法恢复的bug,并在unerase不代参数时恢复所有的文件
erase
#! /bin/bash
(($#==0)) && { echo "No paraments!";exit 1; }
for i in $*
do
if test -e $i
then
cd $(dirname $i)
mv -f $(basename $i) ~/.temp/$(find $(pwd) -maxdepth 1 -name $(basename $i) | tr "/" "=")
cd -
else
echo "$i:No such file or directory!"
fi
done
unerase
#! /bin/bash
cd ~/.temp
list=$(for i in $*; do ls |grep "/<$i/>"; done)
(($#==0)) && { list=$(ls|grep ""); }
for j in $list
do
file=$(echo $j | tr "=" "/")
mv $j ${file%/*}/${file##*/}
done
其实另外有一种解决的方法是把alias rm到mv!
yutian 回复于:2004-07-03 09:34:34
ding
sqh 回复于:2004-07-14 16:44:11
引用:原帖由 "有点惨" 发表:
其实另外有一种解决的方法是把alias rm到mv!
alias
我试验了,没有成功,我不能解决参数问题,比如,
rm是把文件mv到/.temp
alias rm='mv XX /.temp'
那么XX应该是rm后面的文件参数们,可是新的rm要被alias解释,怎么写这个XX呢?
谢谢先
keenor 回复于:2007-09-10 13:25:52
啊
[ 本帖最后由 keenor 于 2007-9-10 13:28 编辑 ]
may240 回复于:2007-09-11 11:34:11
:em02:
luo118 回复于:2007-09-27 10:07:05
学习:) :) :) :)
bobkey 回复于:2007-09-27 11:23:03
以我的经验,能写程序的MM,通常长得很丑。
dayan_he 回复于:2008-05-04 12:55:19
七窍玲珑心,哈哈
jcool 回复于:2008-06-17 13:40:39
哈哈,过来考古 ...很有意思!
原文链接:http://bbs.chinaunix.net/viewthread.php?tid=228037
转载请注明作者名及原文出处
cat erase
#!/bin/ksh
(($#==0)) && { echo "No paraments!";exit 1; }
for i in $*
do
mv -f $i ~/.temp/$(find $(pwd) -maxdepth 1 -name $i|tr "/" "=")
done
cat unerase
#!/bin/ksh
(($#==0))&&{ echo "No paraments!";exit 1; }
cd ~/.temp
list=$(for i in $*;do ls ~/.temp|grep "/<$i/>";done)
for j in $list
do
file=$(echo $j|tr "=" "/")
mv $j ${file%/*}/${file##*/}
done
#! /bin/bash
(($#==0)) && { echo "No paraments!";exit 1; }
for i in $*
do
if test -e $i
then
cd $(dirname $i)
mv -f $(basename $i) ~/.temp/$(find $(pwd) -maxdepth 1 -name $(basename $i) | tr "/" "=")
cd -
else
echo "$i:No such file or directory!"
fi
done
#! /bin/bash
cd ~/.temp
list=$(for i in $*; do ls |grep "/<$i/>"; done)
(($#==0)) && { list=$(ls|grep ""); }
for j in $list
do
file=$(echo $j | tr "=" "/")
mv $j ${file%/*}/${file##*/}
done