呜啦啦乌拉利用python实现回收站
Posted ___Leo___
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了呜啦啦乌拉利用python实现回收站相关的知识,希望对你有一定的参考价值。
全新版本的回收站,基于上一篇回收站的文章[唔、如何帅气、随意地使用rm -rf]改造而来
实现原理:
利用python实现回收站,防止手残党误删数据。<效果很棒>
<将rm指令重定向为本文的python命令,即可实现回收站的操作>
其实就是在删除时,将目标文件备份一份放至回收站
具体方法实现如下
以下操作基于Linux&python2
- 首先随便找个地方新建一个python文件。(为方便后续操作,我将路径设置在了“~/.basic_scipt”,命名为"trash.py",可参考)。py文件内容如下:
#!/usr/bin/python
# coding:utf-8
import os,sys,time,random
TRASH_DIR="~/.trash"
def is_invalid(args):
if args==1:
print('rm: missing operand\\n')
elif args==2:
print('rm: missing object\\n')
else:
print('args invalid\\n')
sys.exit(1)
def path_legal(files_path,opt):
del_list=[]
for file in files_path:
if os.path.exists(file)==0:
print file,': No such file or directory'
del_list.append(file)
for file in files_path:
if os.path.isdir(file)&~("r" in opt):
print("cannot remove "+file+": Is a directory")
del_list.append(file)
for file in del_list:
files_path.remove(file)
return files_path
def analyze_argv(argv):
if len(sys.argv) < 2:
is_invalid(1)
files_path=[]
options_name=[]
super_en=0
clear_en=0
opt=' '
for idx in range(1,len(sys.argv)):
if "+super" in sys.argv[idx]:
super_en=1
elif "+clear" in sys.argv[idx]:
clear_en=1
elif "-" in sys.argv[idx]:
if sys.argv[idx].index("-")==0 :
options_name.append(sys.argv[idx])
else:
files_path.append(sys.argv[idx])
else:
files_path.append(sys.argv[idx])
if len(options_name)& ~len(files_path):
is_invalid(2)
for idx in range(len(options_name)):
opt+=options_name[idx]+' '
files_path=path_legal(files_path,opt)
return files_path,opt,super_en,clear_en
def op_backup(files_path,opt):
os.system('mkdir -p '+TRASH_DIR)
for file in files_path:
STAMP=time.strftime("%y%m%d%H%M%S")
basename=os.path.basename(file)
target=' '+TRASH_DIR+'/'+STAMP+'_'+basename+' '
os.system('cp '+file+target+opt)
message=STAMP+':'+basename+' from '+'`pwd`'
os.system('echo '+message+'>>'+TRASH_DIR+'/log')
return
def op_remove(files_path,opt):
for file in files_path:
os.system('rm '+file+opt)
def op_clear():
code=str(random.randint(0000,9999))
print "To ensure data decutity,please enter the code:",code
a=raw_input()
if a==code:
print('Warning--Remove Trash is Success')
os.system('rm -rf '+TRASH_DIR+'/*')
else:
print('Remove Trash is Failed')
if __name__ == '__main__':
files_path,opt,super_en,clear_en=analyze_argv(sys.argv)
if super_en==0:
op_backup(files_path,opt)
op_remove(files_path,opt)
if clear_en==1:
op_clear()
- 找到home目录下的".bashrc"文件。进入文件后编辑,随意找个位置添加一行指令,内容如下:
alias rm='python ~/.basic_scipt/trash.py'
- 完成以上操作,保存并退出。然后在命令终端执行如下指令,以使bashrc文件的更改生效。
$ source ~/.bashrc
- 在source命令执行完之后,就可以随意找个文件删除一下试试。然后再看看"~/.trash/"路径下是不是新增了文件。如果有,那就是成功了;没有的话,那就再检查一下步骤吧。
新增功能
- 增加参数
+super
:不放入回收站,直接删除目标文件 - 增加参数
+clear
:清空回收站,并生成随机码进行双重验证 - 增加了对非法路径及非法指令的判断,并抛出异常
- 增加了log文件对命令行为进行记录,内容包括目标文件删除时间及所在路径
- 修复了在上一版本常见的bug及问题
BUG
- 暂未遇到
更多详细操作步骤请参考
如果您在实际使用中出现问题或者有更好的解决办法,欢迎留言。
以上是关于呜啦啦乌拉利用python实现回收站的主要内容,如果未能解决你的问题,请参考以下文章