linux下默认删除文件到回收站(bash实现)的方法



fedora下总是会把文件不小心删除了,所以下面的脚本把实现:文件删除默认移动到自己的回收站里面。
 
功能:
 
脚本实现删除文件或者目录到~/waste/(自己定义)。
脚本附带文件名或者目录名,则默认代表”删除”,移动到回收站。
参数 -l 代表列出回收站内容,后面不带参数则列出所有内容,可以指定文件或者目录。
-d 代表清空回收站,后面不带参数为清空回收站,也可以指定删除文件或者目录。
脚本执行权限为root。
首先以root权限创建一个回收站
  www.2cto.com  
$ mkdir ~/waste
 
下面是脚本内容
 
[plain]
#!/bin/bash  
  
arg_del_flag=0  #删除标志,默认是不删除  
arg_list_flag=0 #list标志,默认不list  
  
Waste_Path="/root/waste/"  
if [ $# -lt 1 ]; then  
    echo "usage : $0 -[l|d] [filename]"  
    exit 1  
fi  
  
  
file_num=0  
for param in $@  
do  
    case $param in  
        "-d")  
            arg_del_flag=1              #删除   
            continue  
            ;;  
        "-l")  
            arg_list_flag=1             #list  
            continue  
            ;;  
        "-"*)  
            echo "unknow \"$param\""  
            echo "usage : $0 -[l|d] [filename]"  
            continue  
            ;;  
         *)  
            file[$file_num]="$param"            #文件名  
            let file_num++            
            ;;  
              
    esac    www.2cto.com  
done  
  
i=0  
  
if [ $arg_del_flag -eq 1 ]; then  
    cd ${Waste_Path}  
    if [ $# -eq 1 ];then        #删除所有  
        rm -rf ${Waste_Path}*  
        exit 0  
    fi  
    while [ $i -lt $file_num ]  
    do  
        if [ -f ${file[$i]} ];then      #如果是普通文件  
            rm -f ${Waste_Path}${file[$i]}    
        elif [ -d ${file[$i]} ];then            #如果是目录  
            rm -rf ${Waste_Path}${file[$i]}  
        else  
            echo "${file[$i]} is not existed"  
        fi  
        let i++  
    done          
    exit 0  
fi  
  
if [ $arg_list_flag -eq 1 ]; then  
    cd ${Waste_Path}  
    if [ $# -eq 1 ];then        #list所有  
        ls -l ${Waste_Path}  
        exit 0  
    fi    www.2cto.com  
    while [ $i -lt $file_num ]  
    do  
        if [ -s ${file[$i]} ];then      #文件是否存在 -s 表示文件存在窃长度大于0,成功返回  
            ls -l ${Waste_Path}${file[$i]}  
        else  
            echo "${file[$i]} is not existed"  
        fi  
        let i++  
    done          
    exit 0  
fi  
  
#不存在-l 或者 -d 选项,删除文件  
while [ $i -lt $file_num ]  
do  
    if [ -f ${file[$i]} -o -d ${file[$i]} ];then        #确保文件存在  
        mv  ${file[$i]} ${Waste_Path}  
        if [ $? == 0 ];then  
            echo "${file[$i]} deleted successfully"  
        fi  
    else  
        echo "${file[$i]} is not existed"  
    fi    www.2cto.com  
    let i++  
done          
exit 0  
 
把脚本执行权限修改,然后添加到系统环境变量中!
上面脚本还存在一个小bug,就是在进入回收站判断文件是否存在的时候,我用了一个 -s 选项,若是文件存在且长度大于0,则返回成功。我昨天写脚本测试的时候把空的文件丢到了回收站,所有一直就结了很久。希望大家多多指教!
 
 
 
摘自 firefoxbug的专栏

相关内容

    暂无相关文章