1

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

我想在Linux下用python写一个程序,这个程序做这个工作:批量递归重命名文件夹中的所有文件,如果文件名有子字符串X,重命名为Y,示例:将markdown重命名为md,github.markdown将是重命名为 github.md。

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

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

4

3 回答 3

2

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

我认为这是最稳健的方法。即使重命名是有损的(即,如果您不能仅通过查看重命名的文件名来重建原始文件名或位置),它也会起作用。

也就是说,既然您使用的是 Linux,为什么不直接对文件进行符号链接以使它们可以在另一组名称下访问呢?在 Python 中,这可以使用os.symlink().

于 2013-03-17T08:49:01.950 回答
0

您应该考虑使用修订控制系统。这样,所有更改都可以注册和撤消。有许多不同的程序可供选择。

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

于 2013-03-17T10:19:10.590 回答
0

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

我会根据情况使用两种可能的方法:

1) 使用后进先出队列(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)“先试后买”

如果有模拟操作的方法,那就全部模拟,如果有效,就全部执行,不需要任何反转。

于 2013-03-17T09:50:37.557 回答