【Linux】rm命令有风险!使用脚本替代rm命令,以执行可恢复的删除操作!
- 删除文件
- 把remove.sh放在/bin目录下,在/tmp新建123.txt ,执行remove.sh 123.txt。(即删除)
- 实际上只是把mv到/tmp/RecycleBin/BAK_123.txt.201911051633目录下
- 程序会清理回收站内10天前的文件(/tmp/RecycleBin/:回收站)
- 无参数,则显示操作帮助:
- remove.sh --list 显示硬盘空间与回收站:
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 #打印日志并输出到日志文件