⑴如果用户在命令中加入了-f 选项,则 delete 脚本会直接调用 rm 命令将文件或目录直接删除。如代码中所示,所有的参数包括选项都会传递给 rm 命令。所以只要选项中包括选项-f 就等于调用 rm 命令,可以使用 rm 的所有功能。如:delete –rfv filename 等于 rm –rfv filename。
⑵需要与用户确认是否将文件放入回收站。相当于 Windows 的弹窗提示,防止用户误操作。
⑶清单 .用户交互
⑷echo -ne “Are you sure you want to move the files to the trash?[Y/N]:a”
⑸read reply
⑹if [ $reply = “y” -o $reply = “Y” ]
⑺then #####
⑻判断文件类型并直接删除大于 G 文件
⑼本脚本只对普通文件和目录做操作,其他类型文件不做处理。先对每个参数做循环,判断他们的类型,对于符合的类型再判断他们的大小是否超过 G,如果是则直接从系统中删除,避免回收站占用太大的硬盘空间。
⑽清单 .删除大于 G 的文件
⑾for file in $
⑿if [ -f “$file” –o –d “$file” ]
⒀if [ -f “$file” ] && [ `ls –l $file|awk ‘{print $}’` -gt ]
⒁echo “$file size is larger than G,will be deleted directly”
⒂`rm –rf $file`
⒃elif [ -d “$file” ] && [ `du –sb $file|awk ‘{print $}’` -gt ]
⒄echo “The directory:$file is larger than G,will be deleted directly”
⒅`rm –rf $file`
⒆如以上代码所示,该脚本用不同的命令分别判断目录和文件的大小。鉴于目录的大小应该是包含其中的文件以及子目录的总大小,所以运用了‘du -sb’命令。两种情况都使用了 awk 来获取特定输出字段的值来作比较。
⒇移动文件到回收站并做记录
⒈该部分是 Delete 脚本的主要部分,主要完成以下几个功能
⒉获取参数的文件名。因为用户指定的参数中可能包含路径,所以要从中获取到文件名,用来生成 mv 操作的参数。该脚本中运用了字符串正则表达式‘${file##*/}’来获取。
⒊生成新文件名。在原文件名中加上日期时间后缀以生成新的文件名,这样用户在浏览回收站时,对于每个文件的删除日期即可一目了然。
⒋生成被删文件的绝对路径。为了以后可能对被删文件进行的恢复操作,要从相对路径生成绝对路径并记录。用户输入的参数可能有三种情况:只包含文件名的相对路径,包含点号的相对路径以及绝对路径,脚本中用字符串处理对三种情况进行判断,并进行相应的处理。
⒌调用 logTrashDir 脚本,将回收站中的新文件名、原文件名、删除时间、原文件绝对路径记录到隐藏文件中
⒍将文件通过 mv 命令移动到 Trash 目录下。
⒎详细代码如下所示:
⒏清单 .移动文件到回收站并做记录
⒐now=`date +%Y%m%d_%H_%M_%S`
⒑filename=“${file##*/}”
⒒newfilename=“${file##*/}_${now}”
⒓mark=“。”
⒔mark=“/”
⒕if [ “$file” = ${file/$mark} ]
⒖fullpath=“$(pwd/$file”
⒗elif [ “$file” != ${file/$mark} ]
⒘fullpath=“$(pwd${file/$mark}”
⒙fullpath=“$file”
⒚echo “the full path of this file is :$fullpath”
⒛if mv -f $file ~/trash/$newfilename
①$(/logTrashDir “$newfilename $filename $now $fullpath”
②echo “files: $file is deleted”
③echo “the operation is failed”
④上面就是Linux开始回收站功能的方法介绍了,虽然没有Windows系统那么方便,但是使用命令还是能够轻易实现的。