如何使递归重命名操作(Linux,使用python)可逆?

时间:2013-03-17 08:43:06

标签: python recursion reverse

如何使递归重命名操作(Linux,使用python)可逆?

我想在Linux下编写一个程序并使用python,这个程序完成这个工作:批处理递归重命名文件夹中的所有文件,如果文件名有子串X,重命名为Y,例如:将标记重命名为md,github。 markdown将被重命名为github.md。

困难的部分是如何使操作可逆?如果我想要更改文件名。示例:将github.md更改回github.markdown。

如何设计程序并保持简单,使用什么算法和数据结构?

3 个答案:

答案 0 :(得分:2)

  

将原始文件名和重命名的文件名保存到文件中,有更好的方法吗?

我认为这是最强大的方法。即使重命名是有损的(即如果你只是通过查看重命名的文件名无法重建原始文件名或位置),它也会工作。

那就是说,既然你正在使用Linux,为什么不只是symlink文件使它们可以在另一组名称下访问?在Python中,可以使用os.symlink()完成此操作。

答案 1 :(得分:0)

如果出现错误或异常,我想你想要反转整个操作。

我会使用两种可能的方法,具体取决于具体情况:

1)使用LIFO队列(类Queue.LifoQueue)。

每次操作完成后,对LIFO队列执行put()。

如果有错误或异常,只需get()。

一些示例代码:

import os, Queue.LifoQueue

stack = Queue.LifoQueue()
from = 'original.txt'
to = 'new.txt'
if os.system('mv %s %s' % (from, to)) == 0: # execute operation
    stack.put('mv %s %s' % (to, from)) # save reverse operation

os.system(stack.get()) # execute reverse operation

2)“在购买之前先试试”

如果有一种模拟操作的方法,那么将它们全部模拟,如果它们有效,则全部执行它们,不需要反转任何内容。

答案 2 :(得分:0)

您应该考虑使用revision control system。这样,所有更改都可以注册和注销。有many different programs可供选择。

如果您的目录仅包含文本文件,则可以使用古老的RCS。我个人非常喜欢git,因为像RCS一样,版本信息包含在受版本控制的目录中。 git的优点是它还可以处理二进制文件,并可以处理移动和重命名。像CVSSubversion这样的替代方案通常要求您设置存储库。