LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 5255|回复: 8

删除文件跟恢复文件系列。

[复制链接]
发表于 2003-5-17 22:15:58 | 显示全部楼层 |阅读模式
这一共有三个脚本,他们是一套的
1)del:删除文件,其实是把它移动到/trash/$user/下,不同的用户有不同的存放目录,同时用该目录下的.record文件记录文件原来的路径,删除时间,以备恢复只用。
2)recover:恢复文件,通过.record文件找到足够的信息,从而把它恢复
3)erase:这个是彻底的删除文件,从/trash/$user/目录下,相当于windows下的清空回收站。
为了安全,这个脚本是要在/trash/$user/目录下运行。

以下是这三个脚本
del:

  1. #!/bin/bash
  2. #move the file(s) to the /trash/~ instead of deleting.
  3. #Author: pupilzeng
  4. #E-mail: [email]shixinzeng@sjtu.edu.cn[/email]
  5. USER=`whoami`
  6. TRASH=/trash/$USER
  7. RECORD=/trash/$USER/.record #record file
  8. ORIG=`pwd`
  9. DATE=`date +%T---%Y/%m/%d`

  10. Usage ()
  11. {
  12.         echo "Usage: `basename $0` file(s)"
  13. }

  14. if [ "$1" = "-h" -o "$1" = "--help" ];then
  15.         Usage
  16.         exit 0
  17. fi
  18. if [ $# -le 0 ];then
  19.         Usage
  20.         exit 1
  21. fi

  22. if [ ! -d $TRASH ];then
  23.         mkdir -p $TRASH
  24. fi

  25. for i in "$@"
  26.         do
  27.         if [ -w "$i" ];then
  28.                 mv "$i" $TRASH
  29.                 if [ $? -ne 0 ];then
  30.                 echo "Something wrong occurred while delete file $i"
  31.                 #but now i won't exit,because there may be other files to be deleted!
  32.                 else
  33.                 #now write the record file
  34.                         if [ "`dirname "$i"`" = "." ] #relative path
  35.                         then
  36.                                 echo -e "$PWD/`basename "$i"`\t\t$DATE ">>$RECORD
  37.                         else
  38.                                 echo -e ""$i" \t\t$DATE">>$RECORD
  39.                         fi
  40.                 fi
  41.                 else
  42.                         echo "You have not enough permission to delete $i!"
  43.         fi
  44.         done
  45. exit 0
复制代码


recover:

  1. #!/bin/bash
  2. #recover
  3. #Author: pupilzeng
  4. #E-mail: [email]shixinzeng@sjtu.edu.cn[/email]
  5. #To recover the removed file(s) by script myrm
  6. USER=`whoami`
  7. TRASH=/trash/$USER
  8. RECORD=$TRASH/.record
  9. TEMP=$TRASH/.temp
  10. Usage ()
  11. {
  12.         echo "Usage:`basename $0` file(s)"
  13. }
  14. if [ "$1" = "-h" -o "$1" = "--help" ];then
  15.         Usage
  16.         exit 0
  17. fi

  18. for i in "$@"
  19. do
  20.         DEST=`grep "$i" $RECORD |awk '{ print $1}'`
  21.         mv -f "$i" $DEST
  22.        
  23.         if [ $? -ne 0 ];then
  24.                 echo "Something occurred!"
  25.                 exit 1
  26.         else
  27.                 echo "Recovered $DEST"
  28.         #remove record from $RECORD
  29.         grep -v "$i" $RECORD >$TEMP
  30.         mv -f $TEMP $RECORD
  31.         fi
  32. done
  33. exit 0
复制代码


erase:

  1. #!/bin/bash
  2. #erase
  3. #Author: pupilzeng
  4. #E-mail: [email]shixinzeng@sjtu.edu.cn[/email]
  5. #erase the files in trash that you are sure they needn't at all.
  6. #for assurance,you should do it in /trash/user directory.
  7. Usage ()
  8. {
  9.    cat <<END
  10. Usage:`basename $0` [Option] file(s)
  11. Options:
  12.   -f  :don't prompt before erase files
  13. END
  14. }

  15. USER=`whoami`
  16. TRASH=/trash/$USER
  17. RECORD=$TRASH/.record
  18. FORCE=no
  19. TEMP=$TRASH/.temp

  20. if [ $# -lt 1 ]
  21. then
  22.         echo "Wrong parameters"
  23.         Usage
  24.         exit 1
  25. fi

  26. if [ $PWD != $TRASH ]
  27. then
  28.         echo "you should do it in $TRASH directory!"
  29.         exit 1
  30. fi

  31. if [ "$1" = "-h" -o "$1" = "--help" ]
  32. then
  33.         Usage
  34.         exit 0
  35. fi

  36. if [ "$1" = "-f" ];then
  37.         FORCE=yes
  38.         shift
  39. fi

  40. for i in "$@"
  41. do
  42.         ANS=no
  43.         if [ $FORCE = "yes" ];then
  44.                 rm -fr "$i"
  45.         else
  46.                 echo -n "Do you really wanna erase "$i"? Yes|[No]:"
  47.                 read ANS
  48.                 case $ANS in
  49.                 "Y"|"y"|"Yes"|"yes")
  50.                         rm -fr "$i"
  51.                         ;;
  52.                 *)
  53.                         continue
  54.                         ;;
  55.                 esac
  56.                
  57.         fi
  58.         if [ $? -eq 0 ];then
  59.         #now remove the records
  60.         grep -v "$i" $RECORD >$TEMP
  61.         mv -f $TEMP $RECORD
  62.         fi
  63. done
  64. exit 0
复制代码



感谢javalee,你帮忙解决了文件名中有空格的问题
欢迎大家帮忙测试
有问题,大家一块讨论,我也对这个不熟。
发表于 2003-5-17 23:43:23 | 显示全部楼层
真棒!~ 加入[脚本欣赏],值得收藏!;)
发表于 2003-5-18 17:06:45 | 显示全部楼层
呵呵,几天没来,想法成真了,等过几天闲下来,我就测试一下;)
发表于 2003-5-18 22:51:12 | 显示全部楼层

回复: 删除文件跟恢复文件系列。

如果我这样的话,会不会有问题?
我在/mnt/cdrom

del ~user/filename
发表于 2003-5-18 23:11:49 | 显示全部楼层
当然,你是无法删除cdrom中的文件的,因为,他是只读的.
 楼主| 发表于 2003-5-18 23:24:41 | 显示全部楼层

回复: 回复: 删除文件跟恢复文件系列。

最初由 gzqhz 发表
如果我这样的话,会不会有问题?
我在/mnt/cdrom

del ~user/filename


是不能删,但不能说是一个问题,它会给出提示:You have not enough permission to delete $i!
因为这个脚本在del的时候检查了你对这个文件的操作权限,如果你不能写这个文件的话,你也就没有权限把它删除,我想这一点应该是合理的。
发表于 2003-5-19 12:39:55 | 显示全部楼层

回复: 回复: 回复: 删除文件跟恢复文件系列。

如果我删除的文件使用的是相对路径, 恢复会不会有问题?
如:
当前目录是/usr
删除:
del ../home/me/filename

这样的话能够正确恢复filename吗?
 楼主| 发表于 2003-5-19 20:25:32 | 显示全部楼层

回复: 回复: 回复: 回复: 删除文件跟恢复文件系列。

最初由 gzqhz 发表
如果我删除的文件使用的是相对路径, 恢复会不会有问题?
如:
当前目录是/usr
删除:
del ../home/me/filename

这样的话能够正确恢复filename吗?


哦,这个会有问题,当时忽略了这一点,只是考虑了,当前目录下的这种相对路径跟绝对路径了。
让我改改。
谢谢你提出这个问题。
 楼主| 发表于 2003-5-19 20:59:08 | 显示全部楼层

把del文件改成这样


  1. #!/bin/bash
  2. #move the file(s) to the /trash/~ instead of deleting.
  3. #Author: pupilzeng
  4. #E-mail: [email]shixinzeng@sjtu.edu.cn[/email]
  5. USER=`whoami`
  6. TRASH=/trash/$USER
  7. RECORD=/trash/$USER/.record #record file
  8. ORIG=`pwd`
  9. DATE=`date +%T---%Y/%m/%d`

  10. Usage ()
  11. {
  12.         echo "Usage: `basename $0` file(s)"
  13. }

  14. if [ "$1" = "-h" -o "$1" = "--help" ];then
  15.         Usage
  16.         exit 0
  17. fi
  18. if [ $# -le 0 ];then
  19.         Usage
  20.         exit 1
  21. fi

  22. if [ ! -d $TRASH ];then
  23.         mkdir -p $TRASH
  24. fi

  25. for i in "$@"
  26.         do
  27.         if [ -w "$i" ];then
  28.                 mv "$i" $TRASH
  29.                 if [ $? -ne 0 ];then
  30.                 echo "Something wrong occurred while delete file $i"
  31.                 #but now i won't exit,because there may be other files to be deleted!
  32.                 else
  33.                 #now write the record file
  34.                 [color=RED]#the lines below were modified![/color]
  35.                 CURRENTDIR=$PWD [color=blue]#*[/color]
  36.                 cd `basename "$i"`
  37.                 echo -e "$PWD/`basename "$i"`\t\t$DATE ">>$RECORD
  38.                 cd $CURRENTDIR [color=blue]#* return to original working directory[/color]
  39.                  [color=blue]#The lines marked * can be omitted! For safety,they remain there.[/color]
  40.                [color=RED]#---------------------------------------------------------------
  41. [/color]
  42.                 fi
  43.                 else
  44.                         echo "You have not enough permission to delete $i!"
  45.         fi
  46.         done
  47. exit 0
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表