较安全的rm脚本

March 29th, 2011 Categories: 应用

想必不少人体会过在Linux下误删文件的欲哭无泪的感觉。我整理出一份比较安全的rm脚本,贴在这里。

特性

  • 接管原生的/bin/rm命令,将待删除的文件mv至回收站,便于统一管理,或者更重要的,拯救误删文件。
  • 需要调用原生的rm时,指定路径即可,例如:/bin/rm -rf somefolder
  • 记录删除日志到/var/log/trash.log。如果不需要记录日志,只需要将log变量置空即可。
  • 将文件移动至回收站时自动重命名,以便可以重复删除重名文件。
  • 贴图:我爱正则表达式

贴代码

用法

  • 将下面的代码贴至~/.bashrc 或 ~/.bash_profile中,然后刷新该文件source ~/.bashrc即可。
  • 临时取消自定义的rm:可以使用前文所说的/bin/rm或在当前环境下取消该function的定义:unset -f rm
  • 需要根据自己的系统,修改一下各个变量的定义。
  • Tags:

    31 Responses to “较安全的rm脚本”

    1. March 29th, 2011 at 13:20
      1

      用了很长一段时间的trash-cli了

      [Reply]

      rex Reply:

      不错的东东。看来没必要重新发明。

      [Reply]

      freetstar Reply:

      貌似还有一个比较简单。。http://www.fainz.info/linux-replace-rm-to-mv.html

      [Reply]

       rex Reply:

      楼上提到的脚本如下。本文脚本的思路一致,只不过加上了些自定义的设置等等,顺便练手bash。

      1
      2
      3
      4
      5
      6
      mkdir -p ~/.trash
      alias rm=trash
      trash()
      {
        mv $@ ~/.trash/
      }

      [Reply]

      freetstar Reply:

      博主文章里的代码高亮怎么弄的~求指导~

      [Reply]

      rex Reply:

      可以搜索一下 WP 插件CodeColorer 。它支持 段落风格的代码高亮,以及inline模式的高亮。

      [Reply]

    2. March 29th, 2011 at 21:21
      2

      thanks :) 以前还没听过这个插件~

      [Reply]

    3. qb
      April 1st, 2011 at 21:46
      3

      你好博主, 我有个正则表达式的问题想请教一下:

      我想表示除了制表符\t以外的所有空白字符\s。

      这个字符如何表示。

      多谢!

      [Reply]

      qb Reply:

      明白了,用[^\S\t]

      [Reply]

      rex Reply:

      你的解法有问题。等我回复。

      [Reply]

      qb Reply:

      难道要考虑\n 那就是 [^\S\t\n] ?

      主要应用是在处理excel文件时,有很多看不见的“空格”造成数据往数据库中导入出错。

      所以把excel表格中的数据复制到 emeditor中处理一下。[^\S\t]就可以一下处理完,而不是一列一列得处理。

      [Reply]

      rex Reply:

      除了制表符\t以外的所有空白字符\s

      这个在一般的正则引擎里,只能穷举一下吧。
      有的引擎(.NET)倒是支持字符组的+/-操作。

      [Reply]

      qb Reply:

      perl应该是支持的吧, 我用的文本编辑器是emeditor。 那天试了好像还可以, 就试不好穷举

      [Reply]

      rex Reply:

      (?!\t)\s
      此处是个空白字符,但是此处不是\t。这样试试。

      [Reply]

    4. pt
      April 2nd, 2011 at 09:10
      4

      use

      1
      while [ -e "$1" ]; do

      rm directory as well

      [Reply]

    5. hi
      April 23rd, 2011 at 13:00
      5

      楼主bash的字体是哪种?可以列出来吗?

      [Reply]

    6. abcd
      July 16th, 2011 at 00:58
      6

      博主能评价一下emacs和vim对正则支持得怎么样吗?

      [Reply]

      rex Reply:

      emacs 用得较少。

      [Reply]

      abcd Reply:

      那vim呢?是不是比一般的复杂一些,加转义加得比较多?支持到什么程度?

      [Reply]

      rex Reply:

      应该说,vim对于正则的支持还是相当全面的,只不过语法比较怪异。
      我整理了一份vim 正则特性,在google spreadsheet上,https://spreadsheets.google.com/pub?key=tYpX806OUUWG2uehT7XMH8A,翻墙可见。

      [Reply]

      abcd Reply:

      vim的零宽度反向匹配 atom\@<= 就是perl的(?<=atom),我怎么没试成功呢?请教一下应该怎么写。

      [Reply]

    7. brillywu
      August 17th, 2011 at 16:58
      7

      在sf.net下载了Expressor,这个工具也不错。可以帮助测试build正在表达式。不过在这些软件中,我有些功能不好实现。
      比如:
      ….xyz….
      ~~~====
      …..123….
      ===~~~~~
      …abc…..
      ~~~~=====
      ….345….

      类似这样的文字,其中字符和数字串是我要匹配的东西。我也能正确匹配出来。现在我想把这些找到的东西抽出来,集中起来,变成类似
      xyz
      123
      abc
      345
      这样的形式。如果使用语言来编写程序,我想肯定可以,但是使用工具软件,有这个功能吗?
      谢谢指点。

      [Reply]

    8. hplonline
      August 21st, 2011 at 14:10
      8

      不错~可以不用重复造轮子了。

      有几个地方:
      1. 中间一节获得purename的可以用basename代替
      2. 如果是多个device之间mv,会产生实际的数据搬移操作,不仅仅是修改文件表。这样效率不高。如果先识别mount point,对每个device分别放一个trash,会好不少。

      [Reply]

      rex Reply:

      谢谢!basename 的确是更靠谱的方案。
      mount point 的观点很好。我思考一下。

      [Reply]

    9. wind
      December 23rd, 2011 at 21:54
      9

      请问下德文的正则字符 À-ÖØ-öø-ÿ 怎么转成能支持utf-8 中文呢?

      $q = trim(preg_replace(‘/([^-A-Za-zÀ-ÖØ-öø-ÿ0-9.@ ]*)/’, ”, $_REQUEST['q']));

      [Reply]

    10. February 24th, 2012 at 21:49
      10

      正则表达式很有用,我最近写推箱子程序都用上了。

      [Reply]

    11. May 6th, 2012 at 21:37
      11

      博主要经常更新啊,呵呵

      [Reply]

    12. May 14th, 2012 at 17:26
      12

      分享啦 不错

      [Reply]

    3 trackbacks

    Leave a Comment

    如何在本站贴代码?

    可以使用任意语言名称代替“python”.