linux下默认删除文件到回收站(bash实现)的方法
来源:岁月联盟
时间:2012-04-17
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的专栏