<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/henryblog" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/henryblog" type="application/rss+xml"></fs:self_link><lastBuildDate>Tue, 11 Oct 2011 06:40:24 GMT</lastBuildDate><title>Henry's blog</title><description>记录生活工作中的点点滴滴</description><link atom:type="text/html">http://blog.gougou101.com</link><id xmlns="http://www.w3.org/2005/Atom">http://blog.gougou101.com/?feed=atom</id><link xmlns="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://blog.gougou101.com/?feed=atom"></link><generator xmlns="http://www.w3.org/2005/Atom" uri="http://wordpress.org/" version="3.1.4">WordPress</generator><pubDate>Tue, 11 Oct 2011 06:40:24 GMT</pubDate><item><title>CentOS下shell脚本实现windows的回收站功能</title><link atom:type="text/html">http://blog.gougou101.com/?p=1</link><author xmlns="http://www.w3.org/2005/Atom"><name>henry</name></author><id xmlns="http://www.w3.org/2005/Atom">http://blog.gougou101.com/?p=1</id><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://blog.gougou101.com/?p=1">&lt;p&gt;脚本功能：&lt;br /&gt;
1、在用户执行rm命令时，将文件移动/dump-file/ ，被移动到dump-file 目录下的文件、文件夹以原文件名+删除除的日期格式存放，如 rm.sh 在删除后就会被自动移动到/dump-file/ 下并命名为rm.sh_2011-05-17_11:18:21.bak&lt;br /&gt;
2、此命令在执行时会检测文件或目录的大小，如果文件或目录超过2GB，将不会再将文件移动到回收站，而会直接删除，此功能是为了避免回收站过大而对系统造成影响&lt;/p&gt;
&lt;p&gt;安装方法：&lt;br /&gt;
cp -rp /bin/rm /bin/rm.bak  &lt;br /&gt;
//将系统原有rm 命令改成rm.bak，记住 一定要改成rm.bak,因为回收站脚本需要调用 rm.bak这个命令。  &lt;br /&gt;
cp -rp rm.sh /bin/rm  &lt;br /&gt;
//将你的脚本文件rm.sh 覆盖成/bin/rm文件  &lt;br /&gt;
chmod +x /bin/rm  &lt;br /&gt;
//赋予/bin/rm可执行权限  &lt;br /&gt;
echo &quot;0 8  * * 6   /bin/sh  /fmnp/soft/clean-dump.sh &quot; &amp;gt;&amp;gt;/var/spool/cron/tabs/root  &lt;br /&gt;
//为了防止 /dump-file目录过大，采取每周进行一次删除操作，脚本如下：  &lt;br /&gt;
#!/bin/bash  &lt;br /&gt;
/bin/rm.bak -rf /dump-file/*  &lt;br /&gt;
./bin/rm.bak -rf /tmp/*.rm-dump  &lt;/p&gt;
&lt;p&gt;保存退出&lt;br /&gt;
mkdir /dump-file &amp;amp;&amp;amp; chmod -R 777 /dump-file   &lt;br /&gt;
//创建/dump-file 目录并给予所有用户可写的权限。&lt;/p&gt;
&lt;p&gt;脚本如下：&lt;br /&gt;
#!/bin/bash  &lt;br /&gt;
DumpFile=/dump-file/  &lt;br /&gt;
File=`echo $line|awk '{print $2}'`  &lt;br /&gt;
aa=$(echo $1|grep &quot;^-&quot;)  &lt;br /&gt;
DumpLog=&quot;`whoami`-`date +%m-%d-%H-%M`.rm-dump&quot; &lt;br /&gt;
 &lt;br /&gt;
function TestDir()  &lt;br /&gt;
{  &lt;br /&gt;
    Test_Dir=$(echo $line|grep &quot;/&quot;) #test if is a directory.  &lt;br /&gt;
    Test_Dir2=$(echo $line |awk '{print $2}'|grep &quot;^/&quot;) # Test if the prameter starts with &quot;/&quot;.  &lt;br /&gt;
    Test_Dir3=$(echo $line |awk '{print $2}'|grep &quot;^/tmp&quot;) #  &lt;br /&gt;
    Dir2=$(echo $line |awk -F/ '{print $2}') #Extract the prameter after the first &quot;/&quot;.  &lt;br /&gt;
    Dir=$(echo $line |awk '{print $2}'|awk -F/ '{print $1}') ##Extract the prameter before the first &quot;/&quot;.  &lt;br /&gt;
    D1=`date +%F_%H:%M:%S.bak`  &lt;br /&gt;
    Date=`echo $line | awk '{print $2 &quot;_&quot; D1}' D1=$D1`  &lt;br /&gt;
    DumpLog=&quot;`whoami`-`date +%m-%d-%H-%M`.rm-dump&quot; &lt;br /&gt;
 &lt;br /&gt;
    if [[ $Test_Dir != &quot;&quot; ]] ;then #If parameters include directory  &lt;br /&gt;
        if [[ $Test_Dir2 != &quot;&quot; ]] ;then #If parameter starts with &quot;/&quot;,as formate /a/b/c/  &lt;br /&gt;
            if [[ $Test_Dir3 != &quot;&quot; ]];then # this test is for to repaire less command's error.  &lt;br /&gt;
                rm.bak -rf `echo $line|awk '{print $2}'`  &lt;br /&gt;
            else &lt;br /&gt;
                #echo $line &quot;start with /&quot;  &lt;br /&gt;
                mkdir $DumpFile$Dir2&quot;_&quot;$D1 2&amp;gt;/tmp/$DumpLog # Create directory as format /dump-file/(first directory after &quot;/&quot;)  &lt;br /&gt;
                         &lt;br /&gt;
                mv `echo $line|awk '{print $2}'` $DumpFile$Dir2&quot;_&quot;$D1 &lt;br /&gt;
                echo $DumpFile$Dir2&quot;_&quot;$D1 &lt;br /&gt;
            fi  &lt;br /&gt;
        else #Means that parameter starts without &quot;/&quot; ,as format a/b/c  &lt;br /&gt;
            mkdir $DumpFile$Dir$D1 #Create directory as format /dump-file/(first directory before &quot;/&quot;)  &lt;br /&gt;
            mv `echo $line|awk '{print $2}'` $DumpFile$Dir$D1 &lt;br /&gt;
            echo $line &quot;starts before /&quot; &lt;br /&gt;
        fi  &lt;br /&gt;
    else &lt;br /&gt;
        Date=`echo $line | awk '{print $2 &quot;_&quot; D1}' D1=$D1`  &lt;br /&gt;
        mv `echo $line|awk '{print $2}'` $DumpFile$Date &lt;br /&gt;
    fi  &lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
if [[ &quot;$1&quot; != &quot;&quot; ]] ;then #If the frist parameter is not empty.  &lt;br /&gt;
    if [[ $aa != &quot;$1&quot; ]];then #If the first parameter not start with &quot;-&quot;.  &lt;br /&gt;
        du -s &quot;$@&quot; 2&amp;gt;/tmp/$DumpLog |while read line  &lt;br /&gt;
        do &lt;br /&gt;
            size=`echo $line | awk '$1 &amp;gt;2000000{print $1}'`  &lt;br /&gt;
            if [ &quot;$size&quot; &amp;gt; &quot;1900000&quot; ];then &lt;br /&gt;
                #echo &quot;Lager than 2Mb&quot;  &lt;br /&gt;
                rm.bak -rf `echo $line|awk '{print $2}'`  &lt;br /&gt;
            else &lt;br /&gt;
                TestDir  &lt;br /&gt;
            fi  &lt;br /&gt;
        done  &lt;br /&gt;
    else &lt;br /&gt;
        if [[ &quot;$2&quot; != &quot;&quot;  ]]; then &lt;br /&gt;
            until [ &quot;$2&quot; == &quot;&quot;  ]  &lt;br /&gt;
            do &lt;br /&gt;
                 #echo &quot;function is running&quot;  &lt;br /&gt;
                 du -s $2 2&amp;gt; /tmp/$DumpLog |while read line  &lt;br /&gt;
                 do &lt;br /&gt;
                    size=`echo $line | awk '$1 &amp;gt;2000000{print $1}'`  &lt;br /&gt;
                    if [ &quot;$size&quot; &amp;gt; &quot;1900000&quot; ];then &lt;br /&gt;
                        #echo &quot;Lager than 2Mb&quot;  &lt;br /&gt;
                        rm.bak -rf $2 &lt;br /&gt;
                    else &lt;br /&gt;
                        TestDir  &lt;br /&gt;
 &lt;br /&gt;
                    fi  &lt;br /&gt;
                    shift  &lt;br /&gt;
                 done  &lt;br /&gt;
                 shift  &lt;br /&gt;
            done  &lt;br /&gt;
        else &lt;br /&gt;
            echo -e &quot;No file detected./nTry 'rm --help' for more information. &quot; &lt;br /&gt;
        fi  &lt;br /&gt;
    fi  &lt;br /&gt;
else &lt;br /&gt;
    echo -e &quot;rm: missing operand /nTry 'rm --help' for more information.&quot; &lt;br /&gt;
fi&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.gougou101.com/wp-content/uploads/2011/10/rm.png&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-40&quot; title=&quot;rm&quot; src=&quot;http://blog.gougou101.com/wp-content/uploads/2011/10/rm-300x210.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;210&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content><thr:total>1</thr:total><description>脚本功能： 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 &quot;0 8  * * 6   /bin/sh  /fmnp/soft/clean-dump.sh &quot; &amp;#62;&amp;#62;/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 &amp;#38;&amp;#38; chmod -R 777 /dump-file    //创建/dump-file 目录并给予所有用户可写的权限。 脚本如下： #!/bin/bash   DumpFile=/dump-file/   File=`echo $line&amp;#124;awk '{print [...]&lt;img src=&quot;http://www1.feedsky.com/t1/564568464/henryblog/feedsky/s.gif?r=http://blog.gougou101.com/?p=1&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><content:encoded>&lt;p&gt;脚本功能：&lt;br /&gt;
1、在用户执行rm命令时，将文件移动/dump-file/ ，被移动到dump-file 目录下的文件、文件夹以原文件名+删除除的日期格式存放，如 rm.sh 在删除后就会被自动移动到/dump-file/ 下并命名为rm.sh_2011-05-17_11:18:21.bak&lt;br /&gt;
2、此命令在执行时会检测文件或目录的大小，如果文件或目录超过2GB，将不会再将文件移动到回收站，而会直接删除，此功能是为了避免回收站过大而对系统造成影响&lt;/p&gt;
&lt;p&gt;安装方法：&lt;br /&gt;
cp -rp /bin/rm /bin/rm.bak  &lt;br /&gt;
//将系统原有rm 命令改成rm.bak，记住 一定要改成rm.bak,因为回收站脚本需要调用 rm.bak这个命令。  &lt;br /&gt;
cp -rp rm.sh /bin/rm  &lt;br /&gt;
//将你的脚本文件rm.sh 覆盖成/bin/rm文件  &lt;br /&gt;
chmod +x /bin/rm  &lt;br /&gt;
//赋予/bin/rm可执行权限  &lt;br /&gt;
echo &quot;0 8  * * 6   /bin/sh  /fmnp/soft/clean-dump.sh &quot; &amp;gt;&amp;gt;/var/spool/cron/tabs/root  &lt;br /&gt;
//为了防止 /dump-file目录过大，采取每周进行一次删除操作，脚本如下：  &lt;br /&gt;
#!/bin/bash  &lt;br /&gt;
/bin/rm.bak -rf /dump-file/*  &lt;br /&gt;
./bin/rm.bak -rf /tmp/*.rm-dump  &lt;/p&gt;
&lt;p&gt;保存退出&lt;br /&gt;
mkdir /dump-file &amp;amp;&amp;amp; chmod -R 777 /dump-file   &lt;br /&gt;
//创建/dump-file 目录并给予所有用户可写的权限。&lt;/p&gt;
&lt;p&gt;脚本如下：&lt;br /&gt;
#!/bin/bash  &lt;br /&gt;
DumpFile=/dump-file/  &lt;br /&gt;
File=`echo $line|awk '{print $2}'`  &lt;br /&gt;
aa=$(echo $1|grep &quot;^-&quot;)  &lt;br /&gt;
DumpLog=&quot;`whoami`-`date +%m-%d-%H-%M`.rm-dump&quot; &lt;br /&gt;
 &lt;br /&gt;
function TestDir()  &lt;br /&gt;
{  &lt;br /&gt;
    Test_Dir=$(echo $line|grep &quot;/&quot;) #test if is a directory.  &lt;br /&gt;
    Test_Dir2=$(echo $line |awk '{print $2}'|grep &quot;^/&quot;) # Test if the prameter starts with &quot;/&quot;.  &lt;br /&gt;
    Test_Dir3=$(echo $line |awk '{print $2}'|grep &quot;^/tmp&quot;) #  &lt;br /&gt;
    Dir2=$(echo $line |awk -F/ '{print $2}') #Extract the prameter after the first &quot;/&quot;.  &lt;br /&gt;
    Dir=$(echo $line |awk '{print $2}'|awk -F/ '{print $1}') ##Extract the prameter before the first &quot;/&quot;.  &lt;br /&gt;
    D1=`date +%F_%H:%M:%S.bak`  &lt;br /&gt;
    Date=`echo $line | awk '{print $2 &quot;_&quot; D1}' D1=$D1`  &lt;br /&gt;
    DumpLog=&quot;`whoami`-`date +%m-%d-%H-%M`.rm-dump&quot; &lt;br /&gt;
 &lt;br /&gt;
    if [[ $Test_Dir != &quot;&quot; ]] ;then #If parameters include directory  &lt;br /&gt;
        if [[ $Test_Dir2 != &quot;&quot; ]] ;then #If parameter starts with &quot;/&quot;,as formate /a/b/c/  &lt;br /&gt;
            if [[ $Test_Dir3 != &quot;&quot; ]];then # this test is for to repaire less command's error.  &lt;br /&gt;
                rm.bak -rf `echo $line|awk '{print $2}'`  &lt;br /&gt;
            else &lt;br /&gt;
                #echo $line &quot;start with /&quot;  &lt;br /&gt;
                mkdir $DumpFile$Dir2&quot;_&quot;$D1 2&amp;gt;/tmp/$DumpLog # Create directory as format /dump-file/(first directory after &quot;/&quot;)  &lt;br /&gt;
                         &lt;br /&gt;
                mv `echo $line|awk '{print $2}'` $DumpFile$Dir2&quot;_&quot;$D1 &lt;br /&gt;
                echo $DumpFile$Dir2&quot;_&quot;$D1 &lt;br /&gt;
            fi  &lt;br /&gt;
        else #Means that parameter starts without &quot;/&quot; ,as format a/b/c  &lt;br /&gt;
            mkdir $DumpFile$Dir$D1 #Create directory as format /dump-file/(first directory before &quot;/&quot;)  &lt;br /&gt;
            mv `echo $line|awk '{print $2}'` $DumpFile$Dir$D1 &lt;br /&gt;
            echo $line &quot;starts before /&quot; &lt;br /&gt;
        fi  &lt;br /&gt;
    else &lt;br /&gt;
        Date=`echo $line | awk '{print $2 &quot;_&quot; D1}' D1=$D1`  &lt;br /&gt;
        mv `echo $line|awk '{print $2}'` $DumpFile$Date &lt;br /&gt;
    fi  &lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
if [[ &quot;$1&quot; != &quot;&quot; ]] ;then #If the frist parameter is not empty.  &lt;br /&gt;
    if [[ $aa != &quot;$1&quot; ]];then #If the first parameter not start with &quot;-&quot;.  &lt;br /&gt;
        du -s &quot;$@&quot; 2&amp;gt;/tmp/$DumpLog |while read line  &lt;br /&gt;
        do &lt;br /&gt;
            size=`echo $line | awk '$1 &amp;gt;2000000{print $1}'`  &lt;br /&gt;
            if [ &quot;$size&quot; &amp;gt; &quot;1900000&quot; ];then &lt;br /&gt;
                #echo &quot;Lager than 2Mb&quot;  &lt;br /&gt;
                rm.bak -rf `echo $line|awk '{print $2}'`  &lt;br /&gt;
            else &lt;br /&gt;
                TestDir  &lt;br /&gt;
            fi  &lt;br /&gt;
        done  &lt;br /&gt;
    else &lt;br /&gt;
        if [[ &quot;$2&quot; != &quot;&quot;  ]]; then &lt;br /&gt;
            until [ &quot;$2&quot; == &quot;&quot;  ]  &lt;br /&gt;
            do &lt;br /&gt;
                 #echo &quot;function is running&quot;  &lt;br /&gt;
                 du -s $2 2&amp;gt; /tmp/$DumpLog |while read line  &lt;br /&gt;
                 do &lt;br /&gt;
                    size=`echo $line | awk '$1 &amp;gt;2000000{print $1}'`  &lt;br /&gt;
                    if [ &quot;$size&quot; &amp;gt; &quot;1900000&quot; ];then &lt;br /&gt;
                        #echo &quot;Lager than 2Mb&quot;  &lt;br /&gt;
                        rm.bak -rf $2 &lt;br /&gt;
                    else &lt;br /&gt;
                        TestDir  &lt;br /&gt;
 &lt;br /&gt;
                    fi  &lt;br /&gt;
                    shift  &lt;br /&gt;
                 done  &lt;br /&gt;
                 shift  &lt;br /&gt;
            done  &lt;br /&gt;
        else &lt;br /&gt;
            echo -e &quot;No file detected./nTry 'rm --help' for more information. &quot; &lt;br /&gt;
        fi  &lt;br /&gt;
    fi  &lt;br /&gt;
else &lt;br /&gt;
    echo -e &quot;rm: missing operand /nTry 'rm --help' for more information.&quot; &lt;br /&gt;
fi&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.gougou101.com/wp-content/uploads/2011/10/rm.png&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-40&quot; title=&quot;rm&quot; src=&quot;http://blog.gougou101.com/wp-content/uploads/2011/10/rm-300x210.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;210&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/564568464/henryblog/feedsky/s.gif?r=http://blog.gougou101.com/?p=1&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><category domain="http://blog.gougou101.com">Shell</category><pubDate>Tue, 11 Oct 2011 14:40:24 +0800</pubDate><guid isPermaLink="false">http://blog.gougou101.com/?p=1</guid><dc:creator>henry</dc:creator><fs:srclink>http://blog.gougou101.com/?p=1</fs:srclink><fs:srcfeed>http://blog.gougou101.com/?feed=atom</fs:srcfeed><fs:itemid>feedsky/henryblog/~8799031/564568464/6917382</fs:itemid></item></channel></rss>
