Linux如何开启回收站功能

贾尚也

贾尚也

2016-02-19 11:28

下面是个Linux如何开启回收站功能教程,撑握了其技术要点,学起来就简单多了。赶紧跟着图老师小编一起来看看吧!

Linux系统有回收站吗?答案是否定的,Linux系统并没有Windows中的回收站,但是Linux可以实现回收站的功能,具体要如何实现呢?下面图老师小编就给大家介绍下Linux开启回收站功能的方法,一起来了解下吧。

 Linux如何开启回收站功能

本文仿照 Windows 回收站的功能,运用 Bash 脚本在 Linux 上做了实现,创建 delete 脚本代替 rm 命令对文件或目录进行删除操做。该脚本实现了以下功能:对大于 2G 的文件或目录直接删除,否则放入$HOME/trash 目录下;恢复 trash 目录中的被删除文件到原目录下;文件存放在 trash 目录中超过七天被自动删除。

概述

删除是危险系数很高的操作,一旦误删可能会造成难以估计的损失。在 Linux 系统中这种危险尤为明显,一条简单的语句:rm –rf /* 就会把整个系统全部删除,而 Linux 并不会因为这条语句的不合理而拒绝执行。 在 Windows 中,为了防止误删,系统提供了回收站功能。用户在执行删除操作后,文件并不会直接从硬盘中删除,而是被放到回收站中。在清空回收站前,如果发现有文件被误删,用户可以将回收站中的文件恢复到原来的位置。而 Linux 并没有提供类似功能,删除命令 rm 一旦确认执行,文件就会直接从系统中删除,很难恢复。

回收站构成

本文共用三个脚本实现了回收站的主要功能:Delete 脚本、logTrashDir 脚本和 restoreTrash 脚本。其中 Delete 脚本是核心脚本,其作用是重新封装 rm 命令。相对于 rm 的直接删除,该命令会先将文件或目录移动到$home/trash 目录下。如果用户想要将文件直接删除,可以用 -f 选项,delete 脚本会直接调用 rm –f 命令将文件从硬盘上删除。logTrashDir 脚本用于将被删除文件的信息记录到 trash 目录下的一个隐藏文件中。restoreTrash 脚本用来将放入 trash 中的文件或目录重新恢复到原路径下。在 Linux 系统中,只要将这三个脚本放到/bin/目录下,并用 chmod +X filename 赋予可执行权限,即可直接使用。下面将介绍每个脚本的主要部分

Delete 脚本

创建目录

首先要创建目录来存放被删除的文件,本文在用户根目录$HOME 下建立 trash 目录来存放文件。具体代码如下:

清单 1.创建回收站目录

realrm=/bin/rm

if [ ! -d ~/trash ]

then

mkdir -v ~/trash

chmod 777 ~/trash

fi

如上所示,先判断目录是否已建立,如未建立,即第一次运行该脚本,则创建 trash 目录。变量 realrm 存放了 Linux 的 rm 脚本位置,用于在特定条件下调用以直接删除文件或目录。

输出帮助信息

该脚本在用户仅输入脚本名而未输入参数执行时,输出简要帮助信息,代码如下:

清单 2.输出帮助信息

if [ $# -eq 0 ]

then

echo Usage:delete file1 [file2 file3.。。。]

echo If the options contain -f,then the script will exec ‘rm’ directly

如代码所示,该脚本的运用格式是 delete 后跟要删除的文件或目录的路径,中间用空格隔开。

直接删除文件

有些用户确认失效并想直接删除的文件,不应放入回收站中,而应直接从硬盘中删除。Delete 脚本提供了-f 选项来执行这项操作:

清单 3.直接删除文件

while getopts dfiPRrvW opt

do

case $opt in

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/diannaorumen/)

f)

exec $realrm $@

;;

*)

# do nothing

;;

esac

done

如果用户在命令中加入了-f 选项,则 delete 脚本会直接调用 rm 命令将文件或目录直接删除。如代码中所示,所有的参数包括选项都会传递给 rm 命令。所以只要选项中包括选项-f 就等于调用 rm 命令,可以使用 rm 的所有功能。如:delete –rfv filename 等于 rm –rfv filename。

用户交互

需要与用户确认是否将文件放入回收站。相当于 Windows 的弹窗提示,防止用户误操作。

清单 4.用户交互

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 #####

判断文件类型并直接删除大于 2G 文件

本脚本只对普通文件和目录做操作,其他类型文件不做处理。先对每个参数做循环,判断他们的类型,对于符合的类型再判断他们的大小是否超过 2G,如果是则直接从系统中删除,避免回收站占用太大的硬盘空间。

清单 5.删除大于 2G 的文件

for file in $@

do

if [ -f $file –o –d $file ]

then

if [ -f $file ] && [ `ls –l $file|awk ‘{print $5}’` -gt 2147483648 ]

then

echo $file size is larger than 2G,will be deleted directly

`rm –rf $file`

elif [ -d $file ] && [ `du –sb $file|awk ‘{print $1}’` -gt 2147483648 ]

then

echo The directory:$file is larger than 2G,will be deleted directly

`rm –rf $file`

如以上代码所示,该脚本用不同的命令分别判断目录和文件的大小。鉴于目录的大小应该是包含其中的文件以及子目录的总大小,所以运用了‘du -sb’命令。两种情况都使用了 awk 来获取特定输出字段的值来作比较。

移动文件到回收站并做记录

该部分是 Delete 脚本的主要部分,主要完成以下几个功能

获取参数的文件名。因为用户指定的参数中可能包含路径,所以要从中获取到文件名,用来生成 mv 操作的参数。该脚本中运用了字符串正则表达式‘${file##*/}’来获取。

生成新文件名。在原文件名中加上日期时间后缀以生成新的文件名,这样用户在浏览回收站时,对于每个文件的删除日期即可一目了然。

生成被删文件的绝对路径。为了以后可能对被删文件进行的恢复操作,要从相对路径生成绝对路径并记录。用户输入的参数可能有三种情况:只包含文件名的相对路径,包含点号的相对路径以及绝对路径,脚本中用字符串处理对三种情况进行判断,并进行相应的处理。

调用 logTrashDir 脚本,将回收站中的新文件名、原文件名、删除时间、原文件绝对路径记录到隐藏文件中

将文件通过 mv 命令移动到 Trash 目录下。

详细代码如下所示:

清单 6.移动文件到回收站并做记录

now=`date +%Y%m%d_%H_%M_%S`

filename=${file##*/}

newfilename=${file##*/}_${now}

mark1=。

mark2=/

if [ $file = ${file/$mark2} ]

then

fullpath=$(pwd)/$file

elif [ $file != ${file/$mark1} ]

then

fullpath=$(pwd)${file/$mark1}

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/diannaorumen/)

else

fullpath=$file

fi

echo the full path of this file is :$fullpath

if mv -f $file ~/trash/$newfilename

then

$(/logTrashDir $newfilename $filename $now $fullpath)

echo files: $file is deleted

else

echo the operation is failed

fi

上面就是Linux开始回收站功能的方法介绍了,虽然没有Windows系统那么方便,但是使用命令还是能够轻易实现的。

展开更多 50%)
分享

猜你喜欢

Linux如何开启回收站功能

电脑入门
Linux如何开启回收站功能

QQ相册回收站功能

电脑入门
QQ相册回收站功能

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

QQ相册“回收站”功能介绍

电脑入门
QQ相册“回收站”功能介绍

如何锁定回收站

回收站 电脑入门
如何锁定回收站

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

qq照片回收站如何恢复 qq照片回收站恢复教程

qq
qq照片回收站如何恢复 qq照片回收站恢复教程

腾讯微云回收站功能说明

电脑网络
腾讯微云回收站功能说明

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

AJAX 常用函数创建XMLHTTP对象区别IEMozilla浏览器

AJAX 常用函数创建XMLHTTP对象区别IEMozilla浏览器

Ubuntu安装游戏Wesnoth的步骤

Ubuntu安装游戏Wesnoth的步骤
下拉加载更多内容 ↓