linux自建回收站
1.vim ~/.bashrc
# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi mkdir -p ~/.trash #从这里是需要添加的内容 alias rm=trash alias r=trash alias rl='ls ~/.trash/' alias ur=undelfile undelfile() { mv -i ~/.trash/$@ ./ } trash() { mv -i $@ ~/.trash/ } cleartrash() { read -p "clear sure?[n]" confirm [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/* }
source ~/.bashrc #加载生效
2.删除文件
[root@node62 ~]# rm a.txt bak
3.查看回收站
[root@node62 ~]# rl
a.txt bak
4.还原被删除的文件
[root@node62 ~]# ur a.txt [root@node62 ~]# rl bak
5.清空回收站
[root@node62 ~]# cleartrash
clear sure?[n]y
自定义回收站命令
mkdir -p ~/.trash #从这里是需要添加的内容 alias rm=trash alias r=trash alias rl='ls ~/.trash/' alias hy=undelfile alias qingkong=cleartrash undelfile() { mv -i ~/.trash/$@ ./ } trash() { mv -i $@ ~/.trash/ } cleartrash() { read -p "clear sure?[n]" confirm [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/* }
优化写法2 删除的文件后面加入日期标识
mkdir -p ~/.trash #从这里是需要添加的内容 alias rm=trash alias r=trash alias rl='ls ~/.trash/' alias hy=undelfile alias qingkong=cleartrash undelfile() { mv -i ~/.trash/$@ ./ } trash() { del_date=`date +%Y%m%d%H%M%S` # 循环是因为可能rm多个文件 for arg in "$@" do # 这里将删除时间加入到文件名后是因为mv命令不能覆盖非空目录以及不能使用文件覆盖文件夹 # 加上时间就不会有同名的文件了 mv $arg ~/.trash/$arg-${del_date} done } cleartrash() { read -p "clear sure?[n]" confirm [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/* }

完善回收站
https://github.com/LaiJingli/rmtrash
注意rm_restore函数里日志截取参数应该是第6个 不然恢复的时候成 from 多了会重复覆盖
此行修改为第6个参数
originalpath=`cat $trash_log|grep /$file$|awk '{print $5}'`
originalpath=`cat $trash_log|grep /$file$|awk '{print $6}'`
rm -h 用法1:rmtrash.sh file1[file2][dir3][…]删除文件或dir,然后将它们移动到rmtrash回收站 用法2:rm file1[file2][dir3][…]删除文件或dir,然后将它们移动到rmtrash回收站 rm是rmtrash.sh的别名。 选项: -f mv一个或多个文件到rmtrash回收站 -r mv一个或多个文件到rmtrash回收站 -fr mv一个或多个文件到rmtrash回收站 -rf 射频mv一个或多个文件到rmtrash回收站 -R 将所选文件从rmtrash回收站还原到原始路径 -l 列出垃圾回收站的内容 -i 我显示已删除文件历史的详细日志 -d 按用户输入的文件名从垃圾桶中删除一个或多个文件 -e 清空垃圾回收站 -h 显示此帮助菜单
(3)如果需要彻底删除文件 a、# rm -e 清空回收站 b、# /bin/rm file 直接删除文件而不经过回收站
思考后面下发现如果同一秒内删除同名文件,回收站内会文件重名 加上md5校验文件就不会重复了
代码优化部分
rm_mv () { echo ---------------------------- now=`date +%Y%m%d_%H:%M:%S` dupfix=.`date +%Y%m%d%H%M%S` ###将用户输入的文件循环mv到trash中 ###for file in $file_list ;do #echo $file ###提取用户输入参数的文件名、目录名,拼出绝对路径 file_name=`basename $file` file_dir=$(cd `dirname $file`;pwd) file_fullpath=$file_dir/$file_name
### 获取文件MD5 file_md5=.`md5sum $file_fullpath | awk ' { print $1 } '` ###判断要删除的文件或者目录大小是否超过2G #echo file_fullpath: $file_fullpath #if [[ "$file_fullpath" == "/*" ]];then # echo action deny! #else ####判断即将删除的文件在trash目录里是否已存在 if [[ `ls $trash_dir|grep ^${file_name}$` ]];then ##已存在,文件名重复,需要rename,想原始名的基础上加后缀 加入md5去重 显示文件也去重 trash_dest_path=$trash_dir$file_name$dupfix$file_md5 echo trash目录里已存在$file_name,需要rename $file_name$dupfix$file_md5 else ##不重名,直接按原始文件名保存 trash_dest_path=$trash_dir$file_name fi ####判断如果是要删除文件是根目录,则直接提示并拒绝 if [[ "$file_name" == "/" ]];then echo rm拒绝执行删除根目录操作,否则系统就挂了,你就悲剧了,请检查... else ###mv成功记录log,记录删除时的文件、目录的路径等信息到log,以便恢复数据 mv $file_fullpath $trash_dest_path && \ echo $now `date +%s` `whoami` moved from $file_fullpath to $trash_dest_path >> $trash_log && \ echo -e "\033[31m\033[05m $file is deleted from $file_fullpath\033[0m" #cat $trash_log fi #fi ###done }
参考链接:https://mp.weixin.qq.com/s?__biz=MzA4NzQzMzU4Mg==&mid=2652923726&idx=1&sn=6984ef64704cef3b67d4b6acf44dc888&chksm=8bed4f4fbc9ac6590e9a419545bdc303b0380b2206e1a663e5489e8c549f2da7b3b69d781edf&mpshare=1&scene=23&srcid=0220SnBWZWLj2jh1CIUrD09y#rd
满血拉二胡 残血到处浪

浙公网安备 33010602011771号