小知识:101个脚本之建立linux回收站的脚本

众所周知,linux是没有回收站的,一些人很害怕删错东西(有经验的linux管理员极少范这错误),个人不建议回收站,而应该是培养个人的安全意识。有点小跑题。

接着回来101个脚本之#15 Archiving Files As Theyre Removed 就是建立一个linux回收站的脚本
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/sh
# newrm, a replacement for the existing rm command, provides a
# rudimentary unremove capability by creating and utilizing a new
# directory within the users home directory. It can handle directories
# of content as well as individual files, and if the user specifies
# the -f flag files are removed and NOT archived.
# Big Important Warning: Youll want a cron job or something similar to keep
# the trash directories tamed. Otherwise nothing will ever actually
# be deleted from the system and youll run out of disk space!
mydir=”$HOME/.deleted-files”
realrm=”/bin/rm”
copy=”/bin/cp -R”
if [ $# -eq 0 ] ; then # let rm ouptut the usage error
exec $realrm # our shell is replaced by /bin/rm
fi
# Parse all options looking for -f
flags=””
while getopts “dfiPRrvW” opt
do
case $opt in
f) exec $realrm “$@” ;; # exec lets us exit this script directly.
*) flags=”$flags -$opt” ;; # other flags are for rm, not us
esac
done
shift $(($OPTIND – 1))
# Make sure that the $mydir exists
if [ ! -d $mydir ] ; then
if [ ! -w $HOME ] ; then
echo “$0 failed: cant create $mydir in $HOME” >&2
exit 1
fi
mkdir $mydir
chmod 700 $mydir # a little bit of privacy, please
fi
for arg
do
newname=”$mydir/$(date “+%S.%M.%H.%d.%m”).$(basename “$arg”)”
if [ -f “$arg” ] ; then
$copy “$arg” “$newname”
elif [ -d “$arg” ] ; then
$copy “$arg” “$newname”
fi
done
exec $realrm $flags “$@” # our shell is replaced by realrm

我们来说下这个脚本的实现思路

将原本的rm命令用我们这个带有回收站机制的myrm脚本代替(alias别名),脚本将要删除的文件移动到了home下个人目录中以.deleted-files 命名的隐藏文件夹。

接着我们看看这个脚本是怎么实现的

?
1
2
3
4
5
6
7
while getopts “dfiPRrvW” opt
do
case $opt in
f) exec $realrm “$@” ;; # exec lets us exit this script directly.
*) flags=”$flags -$opt” ;; # other flags are for rm, not us
esac
done

这一段说明 要是命令用带 –f 选项的话,则不进回收站,调用原本的rm命令。

?
1
2
3
4
5
6
7
8
9
for arg
do
newname=”$mydir/$(date “+%S.%M.%H.%d.%m”).$(basename “$arg”)”
if [ -f “$arg” ] ; then
$copy “$arg” “$newname”
elif [ -d “$arg” ] ; then
$copy “$arg” “$newname”
fi
done

用for循环顺序处理参数

newname=”$mydir/$(date “+%S.%M.%H.%d.%m”).$(basename “$arg”)” 回收站里文件命名.

原文链接:http://2804976.blog.51cto.com/2794976/737125

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Mac中使用Nginx实现80端口转发8080端口

2023-4-21 5:16:10

建站知识

小知识:自制Linux终端锁屏工具

2023-4-21 5:32:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索