linux下默认删除文件到回收站(bash实现)的方法

来源:岁月联盟 编辑:exp 时间:2012-04-17

fedora下总是会把文件不小心删除了,所以下面的脚本把实现:文件删除默认移动到自己的回收站里面。 功能: 脚本实现删除文件或者目录到~/waste/(自己定义)。脚本附带文件名或者目录名,则默认代表”删除”,移动到回收站。参数 -l 代表列出回收站内容,后面不带参数则列出所有内容,可以指定文件或者目录。-d 代表清空回收站,后面不带参数为清空回收站,也可以指定删除文件或者目录。脚本执行权限为root。首先以root权限创建一个回收站  www.2cto.com  $ mkdir ~/waste 下面是脚本内容 [plain]#!/bin/bash    arg_del_flag=0  #删除标志,默认是不删除  arg_list_flag=0 #list标志,默认不list    Waste_Path="/root/waste/"  if [ $# -lt 1 ]; then      echo "usage : $0 -[l|d] [filename]"      exit 1  fi      file_num=0  for param in $@  do      case $param in          "-d")              arg_del_flag=1              #删除               continue              ;;          "-l")              arg_list_flag=1             #list              continue              ;;          "-"*)              echo "unknow /"$param/""              echo "usage : $0 -[l|d] [filename]"              continue              ;;           *)              file[$file_num]="$param"            #文件名              let file_num++                        ;;                    esac    www.2cto.com  done    i=0    if [ $arg_del_flag -eq 1 ]; then      cd ${Waste_Path}      if [ $# -eq 1 ];then        #删除所有          rm -rf ${Waste_Path}*          exit 0      fi      while [ $i -lt $file_num ]      do          if [ -f ${file[$i]} ];then      #如果是普通文件              rm -f ${Waste_Path}${file[$i]}            elif [ -d ${file[$i]} ];then            #如果是目录              rm -rf ${Waste_Path}${file[$i]}          else              echo "${file[$i]} is not existed"          fi          let i++      done              exit 0  fi    if [ $arg_list_flag -eq 1 ]; then      cd ${Waste_Path}      if [ $# -eq 1 ];then        #list所有          ls -l ${Waste_Path}          exit 0      fi    www.2cto.com      while [ $i -lt $file_num ]      do          if [ -s ${file[$i]} ];then      #文件是否存在 -s 表示文件存在窃长度大于0,成功返回              ls -l ${Waste_Path}${file[$i]}          else              echo "${file[$i]} is not existed"          fi          let i++      done              exit 0  fi    #不存在-l 或者 -d 选项,删除文件  while [ $i -lt $file_num ]  do      if [ -f ${file[$i]} -o -d ${file[$i]} ];then        #确保文件存在          mv  ${file[$i]} ${Waste_Path}          if [ $? == 0 ];then              echo "${file[$i]} deleted successfully"          fi      else          echo "${file[$i]} is not existed"      fi    www.2cto.com      let i++  done          exit 0   把脚本执行权限修改,然后添加到系统环境变量中!上面脚本还存在一个小bug,就是在进入回收站判断文件是否存在的时候,我用了一个 -s 选项,若是文件存在且长度大于0,则返回成功。我昨天写脚本测试的时候把空的文件丢到了回收站,所有一直就结了很久。希望大家多多指教!   摘自 firefoxbug的专栏