如何使递归重命名操作(Linux,使用 python)可逆?
我想在Linux下用python写一个程序,这个程序做这个工作:批量递归重命名文件夹中的所有文件,如果文件名有子字符串X,重命名为Y,示例:将markdown重命名为md,github.markdown将是重命名为 github.md。
困难的部分是如何使操作可逆?如果我想改回文件名。示例:将 github.md 改回 github.markdown。
如何设计程序并保持简单,使用什么算法和数据结构?
将原始文件名和重命名的文件名保存到文件中,有更好的方法吗?
我认为这是最稳健的方法。即使重命名是有损的(即,如果您不能仅通过查看重命名的文件名来重建原始文件名或位置),它也会起作用。
也就是说,既然您使用的是 Linux,为什么不直接对文件进行符号链接以使它们可以在另一组名称下访问呢?在 Python 中,这可以使用os.symlink()
.
我想如果出现错误或异常,您想反转整个操作。
我会根据情况使用两种可能的方法:
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)“先试后买”
如果有模拟操作的方法,那就全部模拟,如果有效,就全部执行,不需要任何反转。