【Linux】rm命令有风险!使用脚本替代rm命令,以执行可恢复的删除操作!

  • 删除文件
  1. 把remove.sh放在/bin目录下,在/tmp新建123.txt ,执行remove.sh 123.txt。(即删除)
  2. 实际上只是把mv到/tmp/RecycleBin/BAK_123.txt.201911051633目录下
  3. 程序会清理回收站内10天前的文件(/tmp/RecycleBin/:回收站)

【Linux】rm命令有风险!使用脚本替代rm命令,以执行可恢复的删除操作!

  • 无参数,则显示操作帮助:

【Linux】rm命令有风险!使用脚本替代rm命令,以执行可恢复的删除操作!

  • remove.sh --list 显示硬盘空间与回收站:

【Linux】rm命令有风险!使用脚本替代rm命令,以执行可恢复的删除操作!

remove.sh脚本如下:

#!/bin/bash
_del_file=$1
_bak_dir="/tmp/RecycleBin"
function Clean_RecycleBin(){
   _find_old_file=$(find ${_bak_dir} -mtime 10 -regex ".*/BAK.*"  ) #echo "10天前的文件"
   #[ "${_find_old_file}" == "" ] && echo "清理回收站: 无10天前的文件。"
   for i in ${_find_old_file[@]}
   do
      echo "清理回收站: 删除旧的(10天前)备份文件:${i}。"
      rm -frv $i
   done
}
function Move_File(){
  mkdir -p ${_bak_file_name}
  mv ${1} ${_bak_file_name}/
  [ $? -eq 0 ] && echo -e "\t${1} 已删除!(在回收站中查看:${_bak_file_name})"
  [ $? -ne 0 ] && echo -e "\t${1} 无法删除!"
}
function Opt_Desc(){
   echo "1.OPTIONS:"
   echo -e "\tremove.sh\t[FILENAME]\t\t删除文件 "
   echo -e "\tremove.sh\t--list\t\t查看回收站" 
   exit 0
}
function Opt_List(){
   du ${_bak_dir} -h --time --max-depth=1 |sort -k2 |head -25  \
      | awk -F"[ \t]+" 'BEGIN{print "1.查看回收站(超过10天将被彻底删除!):"}{{print "\t"$1"\t"$2,$3"\t"$4}}'
   echo -e "\t{省略...}"
   df -h|awk -F"[% \t]+" 'BEGIN{print "2.查看硬盘空间:"}{if($5>=50){print "\t"$4"\t"$5"%\t"$6}}' #查看硬盘空间
   exit 0
}
function Main(){
   echo -e "\t\t\t\tNAME:\tREMOVE ADN DELETE"
   echo -e "\t\t\t\tTIME:\t$(date '+%F_%T')"
   Clean_RecycleBin >> ${_bak_dir}/DelLOG.$(date '+%Y').log #删除操作做记录
   [ "$1" == "--list" ] && Opt_List
   [ "$1" == "" ] && Opt_Desc
   echo "1.操作:"
   [ ! -e $1 ] && echo -e "\t$(pwd)/${1} 文件不存在!" && exit 0
   _full_path=$(readlink -f ${1})
   _short_name=${_full_path##*/}
   _date=`date +%Y%m%d%H%M`
   _bak_file_name="${_bak_dir}/BAK_${_short_name}.${_date}"
   Move_File ${_full_path}
}
Main $1 |tee -a ${_bak_dir}/DelLOG.$(date '+%Y').log  #打印日志并输出到日志文件
 

  1.