呜啦啦乌拉利用python实现回收站

Posted ___Leo___

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了呜啦啦乌拉利用python实现回收站相关的知识,希望对你有一定的参考价值。

全新版本的回收站,基于上一篇回收站的文章[唔、如何帅气、随意地使用rm -rf]改造而来

实现原理:

利用python实现回收站,防止手残党误删数据。<效果很棒>
<将rm指令重定向为本文的python命令,即可实现回收站的操作>
其实就是在删除时,将目标文件备份一份放至回收站

具体方法实现如下

以下操作基于Linux&python2

  1. 首先随便找个地方新建一个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()
  1. 找到home目录下的".bashrc"文件。进入文件后编辑,随意找个位置添加一行指令,内容如下:
alias rm='python ~/.basic_scipt/trash.py'
  1. 完成以上操作,保存并退出。然后在命令终端执行如下指令,以使bashrc文件的更改生效。
$ source ~/.bashrc
  1. 在source命令执行完之后,就可以随意找个文件删除一下试试。然后再看看"~/.trash/"路径下是不是新增了文件。如果有,那就是成功了;没有的话,那就再检查一下步骤吧。

新增功能

  1. 增加参数+super :不放入回收站,直接删除目标文件
  2. 增加参数+clear :清空回收站,并生成随机码进行双重验证
  3. 增加了对非法路径及非法指令的判断,并抛出异常
  4. 增加了log文件对命令行为进行记录,内容包括目标文件删除时间及所在路径
  5. 修复了在上一版本常见的bug及问题

BUG

  1. 暂未遇到

更多详细操作步骤请参考

  1. 唔、如何帅气、随意地使用rm -rf
  2. 乌拉、利用python实现tree命令

如果您在实际使用中出现问题或者有更好的解决办法,欢迎留言。

以上是关于呜啦啦乌拉利用python实现回收站的主要内容,如果未能解决你的问题,请参考以下文章

呜啦啦乌拉利用python实现回收站

乌拉利用python实现tree命令

乌拉利用python实现tree命令

乌拉利用python实现tree命令

呜啦啦免密登入服务器

呜啦啦免密登入服务器