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

fedora下总是会把文件不小心删除了,所以下面的脚本把实现:文件删除默认移动到自己的回收站里面。

功能:

  1. 脚本实现删除文件或者目录到~/waste/(自己定义)。
  2. 脚本附带文件名或者目录名,则默认代表”删除”,移动到回收站。
  3. 参数 -l 代表列出回收站内容,后面不带参数则列出所有内容,可以指定文件或者目录。
  4. -d 代表清空回收站,后面不带参数为清空回收站,也可以指定删除文件或者目录。
  5. 脚本执行权限为root。

首先以root权限创建一个回收站

$ mkdir ~/waste

下面是脚本内容

#!/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
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
	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
	let i++
done		
exit 0

把脚本执行权限修改,然后添加到 系统环境变量 中!

上面脚本还存在一个小bug,就是在进入回收站判断文件是否存在的时候,我用了一个-s选项,若是文件存在且长度大于0,则返回成功。我昨天写脚本测试的时候把空的文件丢到了回收站,所有一直就结了很久。希望大家多多指教!

你可能感兴趣的:(linux)