zoukankan      html  css  js  c++  java
  • 可以与 safe-rm 协同工作的 bash 回收站

    原文地址:可以与 safe-rm 协同工作的 bash 回收站
    将以代码放进 ~/.bashrc,并执行 source ~/.bashrc 命令即可开始使用

    该脚本在用户目录下建立 .delete 文件夹作为回收站,并替换 rm 命令为 toBackup 方法,将删除文件的动作替换为把文件移动至 .delete/删除日期 并重命名为 删除时间-文件名-随机数 的格式

    lsdel 用于查看今天删除了哪些文件

    cleandel 用于清除回收站

    # for rm {{
    
    DEL_TIME=$(date +%H%M%S)
    BAK_DATE=$(date +%Y%m%d)
    RANDOM=$(date +%s%N | cut -c 6-13)
    
    checkDelDir ()
    {
        if [ ! -d ~/.delete ]; then
            mkdir ~/.delete
        fi
    
        if [ ! -d ~/.delete/${BAK_DATE} ]; then
            mkdir ~/.delete/${BAK_DATE}
        fi
    }
    
    toBackup()
    {
        checkDelDir
        for thing in $@
        do
            echo ${thing} | grep '^-' > /dev/null
            if [ ! $? = 0 ]; then
                thing_name=${thing##*/}
                rnd=${RANDOM}
                mv ${thing} ~/.delete/${BAK_DATE}/${DEL_TIME}-${thing_name%*/}-${rnd}
                echo rename ${thing} to ${DEL_TIME}-${thing_name%*/}-${rnd} and mv to ~/.delete/${BAK_DATE}
            fi
        done
    }
    
    cleanDelete()
    {
        echo 'Clear all backup files?[Y/N]'
        read confirm
        if [[ ${confirm} = 'y' || ${confirm} = 'Y' ]]; then
            /bin/rm -rf ~/.delete/*
        elif [[ ${confirm} = 'n' || ${confirm} = 'N' ]]; then
            echo 'Delete is cancelled by user.'
        else
            echo 'Delete is cancelled because user not press anything.Press y or Y to confirm delete.'
        fi
    }
    
    listDelete()
    {
        echo 'ls ~/.delete/${BAK_DATE}'
        echo 'Only list what you delete today.'
        echo
        ls ~/.delete/${BAK_DATE}
    }
    
    alias rm=toBackup
    alias lsdel=listDelete
    alias cleandel=cleanDelete
    
    # }}
    

    以下脚本配合 safe-rm 使用

    /usr/bin 目录下创建 bashrc-rm 文件,并赋予执行权限

    touch /usr/bin
    chmod +x /usr/bin/bashrc-rm
    

    将以下代码写进 bashrc-rm

    #!/bin/bash
    date=/bin/date
    cut=/usr/bin/cut
    mkdir=/bin/mkdir
    echo=/bin/echo
    mv=/bin/mv
    grep=/bin/grep
    DEL_TIME=$(${date} +%H%M%S)
    BAK_DATE=$(${date} +%Y%m%d)
    RANDOM=$(${date} +%s%N | ${cut} -c 6-13)
    
    checkDelDir ()
    {
    	if [ ! -d ~/.delete ]; then
    		${mkdir} ~/.delete
    	fi
    
    	if [ ! -d ~/.delete/${BAK_DATE} ]; then
    		${mkdir} ~/.delete/${BAK_DATE}
    	fi
    }
    
    toBackup()
    {
    	checkDelDir
    	for thing in $@
    	do
    		${echo} ${thing} | ${grep} '^-' > /dev/null
    		if [ ! $? = 0 ]; then
    			thing_name=${thing##*/}
    			rnd=${RANDOM}
    			${mv} ${thing} ~/.delete/${BAK_DATE}/${DEL_TIME}-${thing_name%*/}-${rnd}
    			${echo} rename ${thing} to ${DEL_TIME}-${thing_name%*/}-${rnd} and mv to ~/.delete/${BAK_DATE}
    		fi
    	done
    }
    
    toBackup $*
    

    替换 safe-rm 脚本中执行删除操作时调用的命令

    该变量在 safe-rm 0.12 版本中定义于 107 行附近

    my $real_rm = '/bin/rm';
    替换为
    my $real_rm = '/usr/bin/bashrc-rm';
    

    删除 ~/.bashrctoBackupcheckDelDir 两个函数,并替换之前的别名定义

    alias rm=toBackup
    替换为
    alias rm=/usr/bin/safe-rm
    
  • 相关阅读:
    javascript有用小技巧—实现分栏显示
    在Apk应用程序内,查找某个Activity。
    NodeJS系列~第一个小例子,实现了request.querystring功能
    IOS开发(objective-c)~开篇有理
    爱上MVC3~布局页的继承与扩展
    我心中的核心组件(可插拔的AOP)~第五回 消息组件
    基础才是重中之重~方法override详解
    数据结构 练习 20-查找 算法
    cocos2d-x适配多分辨率
    VS2010中使用CL快速 生成DLL的方法
  • 原文地址:https://www.cnblogs.com/leviatan/p/9041671.html
Copyright © 2011-2022 走看看