
利用python实现回收站,防止手残党误删数据。<效果很棒>
<将rm指令重定向为本文的python命令,即可实现回收站的操作>
其实就是在删除时,将目标文件备份一份放至回收站
以下操作基于Linux&python2
#!/usr/bin/python
# coding:utf-8
import os,sys,time,random
TRASH_DIR="~/.trash"
def is_invalid(args):
if args==1:
print('rm: missing operandn')
elif args==2:
print('rm: missing objectn')
else:
print('args invalidn')
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()
alias rm='python ~/.basic_scipt/trash.py'
$ source ~/.bashrc
如果您在实际使用中出现问题或者有更好的解决办法,欢迎留言。