脚本功能:
1、在用户执行rm命令时,将文件移动/dump-file/ ,被移动到dump-file 目录下的文件、文件夹以原文件名+删除除的日期格式存放,如 rm.sh 在删除后就会被自动移动到/dump-file/ 下并命名为rm.sh_2011-05-17_11:18:21.bak
2、此命令在执行时会检测文件或目录的大小,如果文件或目录超过2GB,将不会再将文件移动到回收站,而会直接删除,此功能是为了避免回收站过大而对系统造成影响
安装方法:
- cp -rp /bin/rm /bin/rm.bak
- //将系统原有rm 命令改成rm.bak,记住 一定要改成rm.bak,因为回收站脚本需要调用 rm.bak这个命令。
- cp -rp rm.sh /bin/rm
- //将你的脚本文件rm.sh 覆盖成/bin/rm文件
- chmod +x /bin/rm
- //赋予/bin/rm可执行权限
- echo "0 8 * * 6 /bin/sh /fmnp/soft/clean-dump.sh " >>/var/spool/cron/tabs/root
- //为了防止 /dump-file目录过大,采取每周进行一次删除操作,脚本如下:
- #!/bin/bash
- /bin/rm.bak -rf /dump-file/*
- /bin/rm.bak -rf /tmp/*.rm-dump
保存退出
- mkdir /dump-file && chmod -R 777 /dump-file
- //创建/dump-file 目录并给予所有用户可写的权限。
脚本如下:
- #!/bin/bash
- DumpFile=/dump-file/
- File=`echo $line|awk '{print $2}'`
- aa=$(echo $1|grep "^-")
- DumpLog="`whoami`-`date +%m-%d-%H-%M`.rm-dump"
- function TestDir()
- {
- Test_Dir=$(echo $line|grep "/") #test if is a directory.
- Test_Dir2=$(echo $line |awk '{print $2}'|grep "^/") # Test if the prameter starts with "/".
- Test_Dir3=$(echo $line |awk '{print $2}'|grep "^/tmp") #
- Dir2=$(echo $line |awk -F/ '{print $2}') #Extract the prameter after the first "/".
- Dir=$(echo $line |awk '{print $2}'|awk -F/ '{print $1}') ##Extract the prameter before the first "/".
- D1=`date +%F_%H:%M:%S.bak`
- Date=`echo $line | awk '{print $2 "_" D1}' D1=$D1`
- DumpLog="`whoami`-`date +%m-%d-%H-%M`.rm-dump"
- if [[ $Test_Dir != "" ]] ;then #If parameters include directory
- if [[ $Test_Dir2 != "" ]] ;then #If parameter starts with "/",as formate /a/b/c/
- if [[ $Test_Dir3 != "" ]];then # this test is for to repaire less command's error.
- rm.bak -rf `echo $line|awk '{print $2}'`
- else
- #echo $line "start with /"
- mkdir $DumpFile$Dir2"_"$D1 2>/tmp/$DumpLog # Create directory as format /dump-file/(first directory after "/")
- mv `echo $line|awk '{print $2}'` $DumpFile$Dir2"_"$D1
- echo $DumpFile$Dir2"_"$D1
- fi
- else #Means that parameter starts without "/" ,as format a/b/c
- mkdir $DumpFile$Dir$D1 #Create directory as format /dump-file/(first directory before "/")
- mv `echo $line|awk '{print $2}'` $DumpFile$Dir$D1
- echo $line "starts before /"
- fi
- else
- Date=`echo $line | awk '{print $2 "_" D1}' D1=$D1`
- mv `echo $line|awk '{print $2}'` $DumpFile$Date
- fi
- }
- if [[ "$1" != "" ]] ;then #If the frist parameter is not empty.
- if [[ $aa != "$1" ]];then #If the first parameter not start with "-".
- du -s "$@" 2>/tmp/$DumpLog |while read line
- do
- size=`echo $line | awk '$1 >2000000{print $1}'`
- if [ "$size" > "1900000" ];then
- #echo "Lager than 2Mb"
- rm.bak -rf `echo $line|awk '{print $2}'`
- else
- TestDir
- fi
- done
- else
- if [[ "$2" != "" ]]; then
- until [ "$2" == "" ]
- do
- #echo "function is running"
- du -s $2 2> /tmp/$DumpLog |while read line
- do
- size=`echo $line | awk '$1 >2000000{print $1}'`
- if [ "$size" > "1900000" ];then
- #echo "Lager than 2Mb"
- rm.bak -rf $2
- else
- TestDir
- fi
- shift
- done
- shift
- done
- else
- echo -e "No file detected./nTry 'rm --help' for more information. "
- fi
- fi
- else
- echo -e "rm: missing operand /nTry 'rm --help' for more information."
- fi
如非注明则为本站原创文章,欢迎转载。转载请注明转载自:moon's blog
博主你好,我是www.54zone.org的博主,我的域名被盗了,现在使用的是www.hyxl.org这个域名,麻烦改一下,谢谢~!
好的!
加一个,供参考:
http://bbs.chinaunix.net/viewthread.php?tid=3592317&from=favorites
呵呵,学习了,有空参考一下!~ 😛
🙂 实现这个回收站功能 真的很使用
学习了 技术贴啊 前段时间正好想到过这个问题 茅塞顿开 谢谢分享
不错,用到了